2014-10-01 71 views
0

我用下面的佈局設置數據庫:產品具有多種選擇的過濾器MySQL和PHP

prodCategory(ID,姓名) prodsToCategory(CAT_ID,PROD_ID) 產品(ID,名稱,說明等) prodsToOptions(prod_id,cat_id) prodOptions(ID,類型,名稱)

我正在尋找最有效的mysql查詢來加入表並僅返回具有已選擇的選項的產品。

我目前有:

SELECT 
    p.ID, 
    p.name, 
    p.description, 
    p.code, 
    po.name 
    FROM 
    Products p 
    LEFT OUTER JOIN prodsToCategory pc ON p.ID = pc.product_id 
    LEFT OUTER JOIN prodsToOptions pto ON p.ID = pto.product_id 
    LEFT OUTER JOIN prodOptions po ON pto.option_id = po.ID 
    WHERE p.active = '1' 
    AND  pc.category_id = '1' 
    AND  (po.name = 'black' OR po.name = 'blue') 
    GROUP BY p.ID 

URL可能看起來像這樣:

www.test.com/cars?options=black-blue-manual等(貼有AJAX)

上述查詢確實有效,但我確定在設置更多選項時有更清晰的方法。

即使DB模式需要更改,也會收到任何建議。

在此先感謝

+0

一)確保你的表是正確索引。 2.)使用EXPLAIN查詢來優化您的查詢並確保它們使用索引。 – 2014-10-01 20:13:47

回答

0

使用,AND po.name IN('black','blue')

+0

IN比OR更有效嗎? – 2014-10-01 20:13:10