将单个表中的记录与同一列上的过滤器匹配

时间:2012-12-03 12:19:25

标签: mysql

更新:似乎解决方案没有解决问题所以我试图以更好的方式解释。

我正在尝试在产品展示上实施过滤器,该过滤器有许多自定义字段和值。

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'

3 个答案:

答案 0 :(得分:1)

这个直截了当的查询有什么问题:

  

从tbl_fld_val中选择productid,其中(fieldid = 36,值类似于   '%Søl%')或(fieldid = 37 AND值LIKE'%Farvede%');

答案 1 :(得分:0)

您没有显示所需的查询结果,但是,我可以告诉您的查询有效,但您只显示来自表tbl_fld_val的别名为{{1}的值}。如果稍微更改查询,您将看到记录存在:

d1

请参阅SQL Fiddle with Demo

如果您希望数据显示在同一列中,则可以使用与此类似的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

请参阅SQL Fiddle with Demo

或者您可以在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

请参阅SQL Fiddle with Demo

答案 2 :(得分:0)

尝试此SQL查询,我使用OR同时获取3637 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%') )

尝试:http://www.sqlfiddle.com/#!2/d42ad/3