Mysql 在同一列上使用筛选器匹配单个表中的记录n

Mysql 在同一列上使用筛选器匹配单个表中的记录n,mysql,Mysql,更新:看来解决方案并没有解决这个问题,所以我试图以更好的方式解释 我试图在products display上实现一个过滤器,它有许多自定义字段和值 例如 颜色:红、蓝、绿 材质:银、金、铂 制造商:MF1、MF2、MF3 现在,如果有人想选择所有颜色为红色和蓝色、材质为金色、制造商为MF1的产品,那么正确的SQL是什么。请参阅Fiddle中的DB模式 我按照建议使用此查询,但未显示正确的结果: SELECT d1.productid, d1.fieldid, d1.value FROM `xca

更新:看来解决方案并没有解决这个问题,所以我试图以更好的方式解释

我试图在products display上实现一个过滤器,它有许多自定义字段和值

例如

颜色:红、蓝、绿 材质:银、金、铂 制造商:MF1、MF2、MF3

现在,如果有人想选择所有颜色为红色和蓝色、材质为金色、制造商为MF1的产品,那么正确的SQL是什么。请参阅Fiddle中的DB模式

我按照建议使用此查询,但未显示正确的结果:

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)