gpt4 book ai didi

php - 使用括号使用 mysql 查询未检索到正确的结果

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

我正在尝试从 mysql 表中查询所有有效折扣。

设置如下:

ID    ItemID    ProviderID    ConditionID    GradeID    DiscLimit    DiscRedeemed    DiscExp

1 0 0 3 0 10 10 0000-00-00 00:00:00

在哪里DiscExp是一个日期时间。

在任何给定时间,ItemID、ProviderID、ConditionID 或 GradeID 中只有一个值不为 0。

我正在尝试查询所有未达到“限制”的有效折扣DiscRedeemed < DiscLimit而且还没有过期DiscExp < NOW()

这里是查询:

$query = $db->query("SELECT * FROM `store_item_discounts` WHERE 
(ItemID > 0 AND ItemID = '$item[ID]')
OR (ProviderID > 0 AND ProviderID = '$item[Provider]')
OR (ConditionID > 0 AND ConditionID = '$item[ItemCondition]')
OR (GradeID > 0 AND GradeID = '$item[ItemGrade]')
AND (DiscLimit = 0 OR DiscRedeemed < DiscLimit)
AND (DiscExp = '0000-00-00 00:00:00' OR DiscExp > NOW())
ORDER BY DiscType ASC");

属于 $item数组,所有值都是 0,除了 $item['ItemCondition']等于 3。

出于某种原因,这将返回如上所示的结果,其中已达到限制。此外,它不会正确过滤掉日期或其他变量。

我的查询显然有问题,但我无法弄清楚。有什么建议吗?

最佳答案

您遇到了运算符优先级问题。由于 AND 运算符的优先级高于 OR 运算符,因此您的 WHERE 子句看起来像:

WHERE 
(
(ItemID > 0 AND ItemID = '$item[ID]')
OR (ProviderID > 0 AND ProviderID = '$item[Provider]')
OR (ConditionID > 0 AND ConditionID = '$item[ItemCondition]')
) OR (
(GradeID > 0 AND GradeID = '$item[ItemGrade]')
AND (DiscLimit = 0 OR DiscRedeemed < DiscLimit)
AND (DiscExp = '0000-00-00 00:00:00' OR DiscExp > NOW())
)

因此 ConditionID = 3 是返回一行的充分条件。正如 Uueerdo 指出的那样,您需要将所有 OR 条件包含在另一对括号中。您的查询应该如下所示:

$query = $db->query("SELECT * FROM `store_item_discounts` WHERE 
(
(ItemID > 0 AND ItemID = '$item[ID]')
OR (ProviderID > 0 AND ProviderID = '$item[Provider]')
OR (ConditionID > 0 AND ConditionID = '$item[ItemCondition]')
OR (GradeID > 0 AND GradeID = '$item[ItemGrade]')
) AND (DiscLimit = 0 OR DiscRedeemed < DiscLimit)
AND (DiscExp = '0000-00-00 00:00:00' OR DiscExp > NOW())
ORDER BY DiscType ASC");

参见 MySQL documentation了解更多关于运算符优先级的信息。

关于php - 使用括号使用 mysql 查询未检索到正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31482017/

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