【问题标题】:Selecting random number of "where clause" in a MySql query depending upon the choice made out of a given set of checkboxes根据一组给定复选框的选择,在 MySql 查询中选择随机数的“where 子句”
【发布时间】:2012-08-20 06:19:08
【问题描述】:

我有一个时事通讯,其中有以下复选框:
<input type="checkbox" name="assign[]" value="1" >designation_code_1
<input type="checkbox" name="assign[]" value="3" >designation_code_2
<input type="checkbox" name="assign[]" value="4" >designation_code_3
<input type="checkbox" name="assign[]" value="5" >designation_code_4

我有 2 个表,即 tbl_designationstbl_profile,下面提到的是我用来从各个表中检索值的查询。

SELECT 
    * 
FROM 
    tbl_designations AS A
        JOIN (
            SELECT 
                * 
            FROM 
                tbl_profile
            ) AS B
        ON A.is_placement = B.is_placement 
        AND A.designation_code = B.hierarchy 
        AND A.designation_id =5

这个查询给了我 100 条记录 each 对应于 designation_id = "X" 其中 X =(1,2,3,4)

X 的值由上面的复选框决定。 如果我只选择一个复选框(比如第一个复选框),那么我会得到 designation_id = 1 并且查询将根据复选框的选择/选择获取记录并给出所需的结果。

我的疑问是我应该写什么查询,以便当我一次选择多个复选框时,它会根据 choice(s) 从表中提取记录复选框(表示对应于复选框的)。

我正在使用 foreach 循环来获取存储在 assign[] 数组中的值。
请帮助

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    早上好,好奇,

    你可以这样写:

    ... and A.designation_id in (1, 2, 3)
    

    括号内的值应该被选中复选框返回的值替换。

    【讨论】:

    • 您的表单应该返回一个包含选中复选框值的数组。因此,当您将框的值设置为数据库中的 ID 时。返回的数组应包含您要在数据库中查看的所有 id。然后,您基本上可以使用 for 循环构建一个包含由逗号分隔的 id 的字符串,并将其附加到您的查询中
    • 好吧,我已经使用implode() 函数将值发送到in ('values') 它运行良好..
    【解决方案2】:

    这很愚蠢。请改用INjoining each element of $_POST['assign'] 用逗号代替。

    【讨论】:

      【解决方案3】:

      这并不能直接回答你的问题,但是当我在编辑你的帖子以进行格式更改时,我忍不住看到了 SQL。

      我在下面为你重写了它(你永远不应该使用 select * 作为连接 - 只需使用整个表,你的数据库会更加对你更满意),你应该找到更好的结果。

      SELECT 
          * 
      FROM 
          tbl_designations AS A
              JOIN tbl_profile B
              ON A.is_placement = B.is_placement 
              AND A.designation_code = B.hierarchy 
              AND A.designation_id =5
      

      【讨论】:

        【解决方案4】:

        试试这个:

        where X in (1,2,3,4)
        

        【讨论】:

          【解决方案5】:

          您可以构建一个逗号分隔的字符串,并通过 FIND_IN_SET 函数在查询中使用它,例如-

          ...
          WHERE FIND_IN_SET(X, '1,2,3,4')
          

          FIND_IN_SET(str,strlist) 函数。

          【讨论】:

            【解决方案6】:

            为每次刷新选择随机列数,我们使用这个:

            $sql = mysql_query("SELECT * FROM $Tablename where column = '$bookmark' order by rand() limit 1");
            

            :)

            【讨论】:

              猜你喜欢
              • 2013-09-04
              • 2018-10-04
              • 2012-11-25
              • 1970-01-01
              • 2014-03-25
              • 2018-01-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多