PHP:从MYSQL数据库中多次选择?

时间:2015-09-28 22:20:18

标签: php mysql database

我正在尝试搜索MYSQL数据库并在我的PHP页面中显示结果。

我正在使用Multiple Select dropdowns来搜索mysql数据库。

像这样:

<select name="keyword">
<option></option>
<option valeu="Some value">Some value</option>
<option valeu="Some value">Some value</option>
<option valeu="Some value">Some value</option>
<option valeu="Some value">Some value</option>
</select>

<select name="keyword">
<option></option>
<option valeu="Some value">Some value</option>
<option valeu="Some value">Some value</option>
<option valeu="Some value">Some value</option>
<option valeu="Some value">Some value</option>
</select>

并且每个选择下拉列表看起来都是相同的,具有不同的值等。

我的mysql表看起来像这样:

id  Material  Lamination  cat_name  sub_cat_name  product_name
1   metal     gloss          metals       metal sheets    flat metal
2                            metals       metal sheets    flat metal
3   wood      gloss          woods       wood  sheets    flad wood
4                            woods       wood sticks      curved wood

etc etc...

正如您在上面的示例中所看到的,某些产品没有材质 Lamination 值。

所以,我像这样搜索MYSQL:

    if(isset($_POST['keyword'])){

            foreach($_POST['keyword'] as $c){
                if(!empty($c)){
    $sql3 ="SELECT * FROM product_details WHERE sub_cat_name='$currentproduct' AND (Lamination LIKE '$c' OR Material LIKE '$c')";


    $query3 = mysqli_query($db_conx, $sql3);

    if (!$query3) {
        die(mysqli_error($db_conx));
    }


    $productCount3 = mysqli_num_rows($query3); // count the output amount
    if ($productCount3 > 0) {
        while($row3 = mysqli_fetch_array($query3, MYSQLI_ASSOC)){ 

......................................

但是,当我从mysql数据库中获取结果时,它会以一种非常奇怪的方式显示它们。但主要问题是它显示具有sub_cat_name值的其他项目,即使这些项目中没有材料和层压值!

我明白我在MYSQL查询中所做的是错误的,但我无法找到正确的方法!

实际上,我想要实现的只是显示从下拉列表中选择某些条件的项目....

有人可以就此提出建议吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

因此,您有一堆关键字,并且您希望选择材料或层压与至少一个关键字匹配的所有产品。

在不改变太多代码的情况下执行此操作的一种简单方法是简单地将一堆OR连接到您的mysql查询中。

$sql3 = "SELECT * FROM product_details WHERE sub_cat_name='$currentproduct' AND (";

$delimiter = "";
foreach($_POST['keyword'] as $c){
    if(!empty($c)){
        $c = mysqli_real_escape_string($db_conx, $c);
        $sql3 .=  $delimiter . " (Lamination='$c' OR Material='$c')";
        $delimiter  = " OR";
    }
}

$sql3 .= ")";

这会给你一个相当长的查询,但它会包含所有条件。

SELECT * FROM product_details WHERE sub_cat_name='product' AND ( 
(Lamination='metal' OR Material='metal') OR (Lamination='wood' OR 
Material='wood') OR (Lamination='gloss' OR Material='gloss') OR 
(Lamination='glass' OR Material='glass'))

但是,如果您还想让用户不选择任何关键字,那么您需要在没有AND的情况下执行单独的查询。

需要注意的一点是,我添加了mysqli_real_escape_string以保护您的查询免受MySQL注入。