我的mysql查询有问题。对于一个人来说,我无法解决它。
网址参数?a = 1& b = 2& c = 3
结构:
attr_id value_id
查询:
SELECT DISTINCT `product_id`
FROM `products_attr_val`
WHERE
(`attr_id` = '".$searchqueryArray2[0]."' AND `value_id` = '".$searchqueryArray2[1]."')
OR (`attr_id` = '".$searchqueryArray2[0]."' AND `value_id` = '".$searchqueryArray2[1]."')
但问题是如果a = 12& b = 10
如果存在具有属性10或属性12的产品,则显示。我需要展示a = 12和b = 10的产品。
什么错了?
感谢您的帮助。
答案 0 :(得分:2)
听起来您需要使用GROUP BY
和HAVING
条款。
SELECT
`product_id`,
COUNT (`primary_key_id`) AS `attr_count` /* primary key field here */
FROM `products_attr_val`
WHERE
(`attr_id` = ? AND `value_id` = ?)
OR (`attr_id` = ? AND `value_id` = ?)
/* additional as necessary
OR (`attr_id` = ? AND `value_id` = ?)
*/
GROUP BY `product_id`
HAVING `attr_count` = ? /* value here should be equal to number of attributes you are checking for */
确保您在product_id
和attr_id
之间拥有唯一索引才能使其正常工作(您应该已经拥有此索引,因为产品具有相同的多个记录不太可能attr_id
)。
如果您还没有,还需要确保转义值以便在SQL中使用。我在这里用?
显示这些变量,如果我们使用准备好的语句,那么你可能会编写这个SQL。