0

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

我正在尝试在产品显示上实现一个过滤器,它有许多自定义字段和值。

例如

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

现在,如果有人想选择颜色为红色和蓝色、材料为金色、制造商为 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'
4

3 回答 3

1

这个简单的查询有什么问题:

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

于 2012-12-03T12:27:12.357 回答
0

您没有显示查询的所需结果是什么,但是,据我所知,您的查询正在运行,但您只显示来自您的表tbl_fld_val中的值 alias 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%');

请参阅带有演示的 SQL Fiddle

如果您希望数据出现在相同的列中,那么您可以使用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%')

请参阅带有演示的 SQL Fiddle

或者你可以OR在你的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 Fiddle

于 2012-12-03T12:25:17.853 回答
0

试试这个 SQL 查询,我曾经OR同时获取3637fieldid

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

于 2012-12-03T12:25:26.733 回答