MySQL查询搜索多个属性和value_id

时间:2014-10-15 17:54:33

标签: php mysql sql

我的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的产品。

什么错了?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

听起来您需要使用GROUP BYHAVING条款。

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_idattr_id之间拥有唯一索引才能使其正常工作(您应该已经拥有此索引,因为产品具有相同的多个记录不太可能attr_id)。

如果您还没有,还需要确保转义值以便在SQL中使用。我在这里用?显示这些变量,如果我们使用准备好的语句,那么你可能会编写这个SQL。