我正在尝试实施多选复选框价格过滤器,目前我有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
答案 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;
如果它不起作用,请告诉我。请发送错误也谢谢。