我试图弄清楚产品和产品属性之间的关系。
我有一个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_id | attribute_id | attribute_value_id
attribute_id是属性组(例如颜色,性别) attribute_value_id是特定值(例如蓝色,男性,女性)
换句话说,我需要所有蓝色或红色男士产品。
有什么建议吗? 先感谢您。任何帮助表示赞赏。
答案 0 :(得分:0)
可能有点晚了,但我觉得迟到总比没有好:p
subquery
选择condition 1
或condition 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,
});
});
};