0

更新:解決策で問題が解決しなかったようですので、より良い方法で説明しようとしています。

多くのカスタムフィールドと値を持つ製品ディスプレイにフィルターを実装しようとしています。

例えば

カラー:レッド、ブルー、グリーン素材:シルバー、ゴールド、プラチナメーカー:MF1、MF2、MF3

ここで、誰かが色を赤と青、材料を金、製造元をMF1としてすべての製品を選択したい場合、正しいSQLは何でしょうか。Fiddle(http://www.sqlfiddle.com/#!2/6373d/2/0 )の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'
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、エイリアスが付いたテーブルからの値のみを示しています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 FiddlewithDemoを参照してください

のデータを同じ列に表示する場合は、次のようなものを使用できます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 FiddlewithDemoを参照してください

または、句の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 FiddlewithDemoを参照してください

于 2012-12-03T12:25:17.853 に答える
0

このSQLクエリを試してみてください。以前はとfieldidORの両方を取得していました。3637

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 に答える