2012-12-03 82 views
0

更新:似乎解決方案沒有解決問題,所以我試圖用更好的方式解釋。匹配來自同一列上的過濾器的單個表的記錄

我想在產品展示上實現一個過濾器,其中有許多自定義字段和值。

E.g.

顏色:紅,藍,綠 材料:銀,金,鉑 製造商:MF1,MF2,MF3

現在,如果有人想選擇色彩的所有產品爲紅&藍,材質爲黃金和製造商作爲MF1,什麼是正確的SQL。請參閱在小提琴的DB模式在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' 

回答

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 Fiddle with Demo

如果你想要的數據出現在同一列,那麼你可以使用一個類似於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 with Demo

或者你可以嘗試一個OR你01之間項條款:

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 with Demo

+0

@Bluefleet,請參閱上面一行值的修改。現在,如果我運行下面的查詢,它不會顯示任何記錄: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'%Test%') AND(d2.fieldid = 37 AND d2.value LIKE'%Farvede%');但有一些列的fieldid爲36,值爲test。 – user1872523

+0

@ user1872523你想要的結果是什麼? – Taryn

+0

謝謝@Bluefleet,非常感謝您節省我的幾個小時。 – user1872523

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

+0

謝謝@Muthu,但我想選擇只匹配記錄,這兩個記錄滿足字段id的條件。 – user1872523

1

什麼錯這個簡單查詢:

從tbl_fld_val

選擇的productid其中(fieldid = 36和像 值 '%溶膠%')或(fieldid = 37和值LIKE '%Farvede%');

+0

不想要OR,只需要那些滿足以下規則的記錄:條件1 &&條件2 其中條件1 =(SubCond 1_1 && SubCond 1_2) 和條件2 =(SubCond 2_1 && SubCond 2_2) – user1872523

相關問題