我试图找出最好的方法来获取所有"搜索产品"其中包含具有指定属性的部件。这就是我现在所拥有的,但是尽管它们是具有属性/属性标题的部分,但它不会返回任何内容。
SELECT DISTINCT * FROM searchproduct
JOIN part ON searchproduct.id = part.searchproduct_id
LEFT JOIN part_attribute ON part.id = part_attribute.part_id
JOIN part_attribute ON part_attribute.id = part_attribute.part_attributeheader_id
WHERE (part_attribute.name = 'Colour' AND part_attribute.value IN ('Black')) AND (part_attribute.name = 'Size' AND part_attribute.value IN ('11'));
每个searchproduct
有多个part
,每个part
有多个part_attribute
,每个part_attribute
有一个part_attributeheader
,每个part_attributeheader
name
有一个samplesearchproduct (searchproduct)
|
v
part B (part)
| |
v v
"11" "Black" (part_attribute.value)
| |
v v
"Size" "Colour" (part_attributeheader.name)
。
我想我可能需要添加某种分组?我尝试的一切都没有结果。
这是一个数据示例(是否有更好的方式来展示它?)
@users.each_with_index do |user, i|
答案 0 :(得分:2)
我正在努力理解你的数据布局(part_attribute和part_attributeheader不同的表),但你认为你需要2个连接。这样的事情: -
SELECT DISTINCT *
FROM searchproduct
JOIN part ON searchproduct.id = part.searchproduct_id
INNER JOIN part_attribute p0 ON part.id = p0.part_id
INNER JOIN part_attribute P1 ON p.id = P1.part_attributeheader_id
WHERE (p0.name = 'Colour' AND p0.value IN ('Black'))
AND (P1.name = 'Size' AND P1.value IN ('11'));