更新:似乎解决方案没有解决问题所以我试图以更好的方式解释。
我正在尝试在产品展示上实施过滤器,该过滤器有许多自定义字段和值。
E.g。
颜色:红色,蓝色,绿色 材质:银色,金色,铂金 制造商:MF1,MF2,MF3
现在,如果有人想要选择Color为Red&amp ;;蓝色,材质为黄金,制造商为MF1,什么是正确的SQL。请参阅Fiddle的http://www.sqlfiddle.com/#!2/6373d/2/0
中的数据库架构我按建议使用此查询,但未显示正确的结果:
SELECT d1.productid, d1.fieldid, d1.value FROM `xcart_extra_field_values` d1 LEFT JOIN xcart_products_categories AS cat ON d1.productid = cat.productid WHERE (d1.fieldid= '36' AND d1.value LIKE '%14 karat guld%') AND cat.categoryid = '797' UNION ALL SELECT d2.productid, d2.fieldid, d2.value FROM `xcart_extra_field_values` d2 LEFT JOIN xcart_products_categories AS cat ON d2.productid = cat.productid WHERE (d2.fieldid= '37' AND d2.value LIKE '%Brillanter%') AND cat.categoryid = '797'
答案 0 :(得分:1)
这个直截了当的查询有什么问题:
从tbl_fld_val中选择productid,其中(fieldid = 36,值类似于 '%Søl%')或(fieldid = 37 AND值LIKE'%Farvede%');
答案 1 :(得分:0)
您没有显示所需的查询结果,但是,我可以告诉您的查询有效,但您只显示来自表tbl_fld_val
的别名为{{1}的值}。如果稍微更改查询,您将看到记录存在:
d1
如果您希望数据显示在同一列中,则可以使用与此类似的SELECT d1.productid, d1.fieldid, d1.value
,d2.productid d2pid, d2.fieldid d2did, d2.value d2val
FROM tbl_fld_val d1
INNER JOIN tbl_fld_val d2
ON d1.productid=d2.productid
WHERE (d1.fieldid= 36 AND d1.value LIKE '%Søl%')
AND (d2.fieldid= 37 AND d2.value LIKE '%Farvede%');
:
UNION ALL
或者您可以在SELECT d1.productid, d1.fieldid, d1.value
FROM tbl_fld_val d1
WHERE (d1.fieldid= 36 AND d1.value LIKE '%Søl%')
union all
SELECT d2.productid, d2.fieldid, d2.value
FROM tbl_fld_val d2
WHERE (d2.fieldid= 37 AND d2.value LIKE '%Farvede%')
条款之间尝试OR
:
WHERE
答案 2 :(得分:0)
尝试此SQL查询,我使用OR
同时获取36
和37
fieldid
SELECT d1.productid, d1.fieldid, d1.value
FROM tbl_fld_val d1
WHERE ( (d1.fieldid= 36 AND d1.value LIKE '%Søl%') OR (d1.fieldid= 37 AND d1.value LIKE '%Farvede%') )