gpt4 book ai didi

php - 具有多个参数的mysql查询不起作用

转载 作者:行者123 更新时间:2023-11-30 22:05:28 25 4
gpt4 key购买 nike

我正在尝试实现多选复选框价格过滤器,目前我有 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

最佳答案

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

问题出在查询的逻辑上,如果你勾选了多个checkbox,查询基本上要求价格是e.g.在 0 到 30 之间在 30 到 100 之间,这总是错误的。

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

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

关于php - 具有多个参数的mysql查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41920207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com