多参数不工作的mysql查询

时间:2017-01-29 11:09:12

标签: php mysql

我正在尝试实施多选复选框价格过滤器,目前我有4个复选框:

1.free
2.$0-$30
3.$30-$100
4.$100+

我的PHP代码是。

<input type="checkbox"  name = "price[]" <?=@$price_check?> class="filters" value="free">Free</label>
<input type="checkbox" name = "price[]" <?=@$price_check?> class="filters" value="affordable-price">0 - 30$
<input type="checkbox"  name = "price[]" <?=@$price_check?> class="filters" value="medium-price">30-100$</label>
<input type="checkbox"  name = "price[]" <?=@$price_check?> class="filters" value="high-price">100$+</label>


if(isset($_GET['price']) && $_GET['price']!="")
          {
     $query = "SELECT c.course_id,c.course_title,c.course_url,c.course_thumbnail_url,p.course_provider_name,c.course_category,p.course_provider_icon,c.course_rating,c.course_price from course_catalog_table c inner join course_providers_table p on c.course_provider_id = p.course_provider_id ";
            if(in_array('free',$_GET['price']))
            {
              $query .= "AND c.course_price = 0 ";
            }
            if(in_array('affordable-price', $_GET['price']))
            {
              $query .= "AND c.course_price between 0 and 30 ";
            }
            if(in_array('medium-price', $_GET['price']))
            {
              $query .= "AND c.course_price between 30 and 100 ";
            }
            if(in_array('high-price', $_GET['price']))
            {
              $query .= "AND c.course_price > 100 ";
            }
          }

主要问题: 我的查询仅适用于一个复选框,如果用户选择多个复选框,查询未返回任何结果,我尝试打印查询并在phpmyadmin中执行并且没有返回任何行,所以现在我知道我的查询有问题但无法找出引起错误的部分。

选中所有复选框后,这是mysql查询:

SELECT 
    c.course_id,
    c.course_title,
    c.course_url,
    c.course_thumbnail_url,
    p.course_provider_name,
    c.course_category,
    p.course_provider_icon,
    c.course_rating,
    c.course_price
FROM
    course_catalog_table c
        INNER JOIN
    course_providers_table p ON c.course_provider_id = p.course_provider_id
        AND c.course_price = 0
        AND c.course_price BETWEEN 0 AND 30
        AND c.course_price BETWEEN 30 AND 100
        AND c.course_price > 100

2 个答案:

答案 0 :(得分:0)

在您的情况下,MySQL不会引发任何错误,因为生成的查询是有效的。

问题在于查询的逻辑,如果你检查多个复选框,查询基本上要求价格是例如在0到30之间在30到100之间,这总是错误的。

你应该像这样构建你的查询: [SELECTION STUFF] AND (c.course_price = 0 OR c.course_price between 0 and 30)并使用OR连接各种范围规范。

此外,正如Muzamil所述,您应该在范围选择逻辑中分离JOIN ON条件,在第一个范围语句之前使用WHERE

答案 1 :(得分:0)

我认为问题出现在这里的查询部分

on c.course_provider_id = p.course_provider_id AND c.course_price = 0

你需要添加&#34;在哪里&#34;在第一次&#34; AND&#34;之后的p.course_provider_id之后操作

新查询应该看起来像

SELECT c.course_id,c.course_title,c.course_url,c.course_thumbnail_url,p.course_provider_name,c.course_category,p.course_provider_icon,c.course_rating,c.course_price from course_catalog_table c inner join course_providers_table p on c.course_provider_id = p.course_provider_id WHERE c.course_price = 0 AND c.course_price between 0 and 30 AND c.course_price between 30 and 100 AND c.course_price > 100

再次出现逻辑检查还有一个问题。

AND c.course_price = 0
        AND c.course_price BETWEEN 0 AND 30
        AND c.course_price BETWEEN 30 AND 100
        AND c.course_price > 100

以上条件如何才能成真?我实际上并不知道你想要达到什么目标。我认为你应该使用&#34; OR&#34;操作员或使用一个条件&#34; c.course_price&gt; 0&#34;

如果它不起作用,请告诉我。请发送错误也谢谢。