MYSQL:产品 - 属性关系

时间:2017-08-23 07:26:54

标签: mysql

我试图弄清楚产品和产品属性之间的关系。 我有一个product表和一个product_attributes表。 产品可以有多个属性。 我需要一个查询来查找具有一个特定属性和另一个特定属性的所有产品。 例如。带有attribute_value_id" 1"的产品此产品还必须具有attribute_value_id IN(2,3,4)

我认为这会做到,但事实并非如此:

SELECT DISTINCT p.product_id 
FROM `product` p 
JOIN `product_attribute` pa ON (p.product_id = pa.product_id) 
WHERE pa.attribute_value_id = 1 AND pa.attribute_value_id IN(2, 3, 4) 

产品

PRODUCT_ID

product_attribute

product_id | attribute_id | attribute_value_id

attribute_id是属性组(例如颜色,性别) attribute_value_id是特定值(例如蓝色,男性,女性)

换句话说,我需要所有蓝色或红色男士产品。

有什么建议吗? 先感谢您。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

可能有点晚了,但我觉得迟到总比没有好:p

subquery选择condition 1condition 2匹配的记录。如果产品符合这两个条件,则结果中将显示2行。

outer query对结果& count()执行count = 2检查product,输出不同的-- outer query SELECT a.product_id, count(a.attribute_value_id) as attribute_count FROM -- subquery ( SELECT p.*, pa.attribute_value_id FROM product p JOIN product_attribute pa ON (p.product_id = pa.product_id) WHERE -- condition 1 pa.attribute_value_id = 1 -- condition 2 OR pa.attribute_value_id IN(2, 3, 4) ) a GROUP BY a.product_id HAVING attribute_count = 2; ,其中匹配2个条件。

let addUser = (req, res) => {
    let user;
    let message = "";
    let status = 200;

    bcrypt.hash(password, salt_rounds, (err, hash) => {
        user = new user({
            ...
            password: hash,
        });

        user.save(err => {
            if(err) {
                message = "No success";
                status = 400;
            } else {
                message = "success";
            }
        });

        res.status(status).json({
            message: message,
        });
    });
};