Mysql 在同一列上使用筛选器匹配单个表中的记录n
更新:看来解决方案并没有解决这个问题,所以我试图以更好的方式解释 我试图在products display上实现一个过滤器,它有许多自定义字段和值 例如 颜色:红、蓝、绿 材质:银、金、铂 制造商:MF1、MF2、MF3 现在,如果有人想选择所有颜色为红色和蓝色、材质为金色、制造商为MF1的产品,那么正确的SQL是什么。请参阅Fiddle中的DB模式 我按照建议使用此查询,但未显示正确的结果:Mysql 在同一列上使用筛选器匹配单个表中的记录n,mysql,Mysql,更新:看来解决方案并没有解决这个问题,所以我试图以更好的方式解释 我试图在products display上实现一个过滤器,它有许多自定义字段和值 例如 颜色:红、蓝、绿 材质:银、金、铂 制造商:MF1、MF2、MF3 现在,如果有人想选择所有颜色为红色和蓝色、材质为金色、制造商为MF1的产品,那么正确的SQL是什么。请参阅Fiddle中的DB模式 我按照建议使用此查询,但未显示正确的结果: SELECT d1.productid, d1.fieldid, d1.value FROM `xca
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'
您没有显示所需的查询结果,但从我可以看出,您的查询正在运行,但您只显示了来自表
tbl\u fld\u val
的值,别名为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%')
看
或者您可以在WHERE
子句之间尝试或:
SELECT d1.productid, d1.fieldid, d1.value
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%')
OR (d2.fieldid= 37 AND d2.value LIKE '%Farvede%');
请参见尝试此SQL查询,我使用或获取36
和37
字段ID
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%') )
试试看:这个简单的查询有什么问题:
从tbl_fld_val中选择productid,其中(fieldid=36和类似的值
“%Søl%”或(fieldid=37,值类似于“%Farvede%”)
谢谢@Muthu,但我只想选择匹配的记录,这些记录同时满足字段id上的两个条件。@Bluefleet,请查看上面一行值的修改。现在,如果我运行以下查询,它不会显示任何记录:选择d1.productid、d1.fieldid、d1.value、d2.productid d2pid、d2.fieldid d2did、d2.value d2val从tbl_fld_val d1内部连接tbl_fld_val d2到d1.productid=d2.productid,其中(d1.fieldid=36和d1.value类似于“%Test%”)和(d2.fieldid=37和d2.value类似于“%Farvede%”);但是有些列的fieldid为36,value为test。@user1872523您希望得到什么样的结果?感谢@Bluefleet,非常感谢您为我节省了几个小时。我不想要或只想要满足以下规则的记录:条件1和条件2,其中条件1=(subcld 1\u 1和subcld 1\u 2)和条件2=(分包2_1和分包2_2)