多选查询数据库

时间:2013-01-08 03:41:46

标签: php javascript sql multiple-select

我推翻了最近的帖子并删除了它。希望这个版本更清晰一点。

我有一个多选下拉列表,我希望能够使用。

过滤数据库表

所以如果我有大约70个条目的下面的下拉列表:

<select multiple="multiple" id="filter" name="filter">
  <optgroup label="category1"> <!--jquery ui plugin allows for grouping -->
    <option value="sub1">Subcategory 1</option>
    <option value="sub2">Subcategory 2</option>
    <option value="sub3">Subcategory 3</option>
  </optgroup>
  <optgroup label="category2">
    <option value="sub4">Subcategory 4</option>
    <option value="sub5">Subcategory 5</option>
    <option value="sub6">Subcategory 6</option>

...     

我需要在我的sql语句中搜索6个类别,因此到目前为止我已经:

<?php
    include ("connect.php");

    $filter = $_POST["filter"];

        $result = mysql_query("SELECT * FROM edt_images
                                WHERE category1= '$filter'
                                OR category2= '$filter'
                                OR category3 = '$filter'
                                OR category4 = '$filter'
                                OR category5 = '$filter'
                                OR category6 = '$filter'")
            or die(mysql_error());
        while ($row = mysql_fetch_array($result)) {
            echo "<img src='files/small/thumb0_".$row['item_name'].".".$row['file_extension']."' border='0'/>"; 
        }
?>

现在它可以工作,如果我只从下拉列表中选择一个项目,因为它在六个列中搜索该条目。所以我的问题是如何在这六列中搜索多个条目?

提前致谢

2 个答案:

答案 0 :(得分:2)

如果过滤器是所选类别的数组,则可以在查询中使用IN

$filterIn = implode("','",$filter);

SELECT * FROM edt_images
        WHERE category1 IN ('$filterIn')
        OR category2 IN ('$filterIn')
        OR category3 IN ('$filterIn')
        OR category4 IN ('$filterIn')
        OR category5 IN ('$filterIn')
        OR category6 IN ('$filterIn')

但请注意,您不应在SQL查询中使用未经过授权的用户输入。

答案 1 :(得分:0)

恕我直言,首先你需要允许从你的多选中返回多个值。为此,您需要在名称属性中添加括号,如下所示:

<select multiple="multiple" id="filter" name="filter[]">