我的mysql查询有问题。有几天我解决不了这个问题。
URL参数?a=1&b=2&c=3
结构:
attr_idvalue_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
并且如果存在具有atribute 10或atribute 12的产物,则其显示。我需要展示a=12和b=10的产品。
怎么了?
谢谢你的帮助。
听起来需要使用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的一种方式。