更新:似乎解決方案沒有解決問題,所以我試圖用更好的方式解釋。匹配來自同一列上的過濾器的單個表的記錄
我想在產品展示上實現一個過濾器,其中有許多自定義字段和值。
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'
@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
@ user1872523你想要的結果是什麼? – Taryn
謝謝@Bluefleet,非常感謝您節省我的幾個小時。 – user1872523