我有兩個表。一個是items
,另一個是tags
。查詢的here。Mysql Join Query多次給出相同的結果
這個想法是創建一個搜索框來搜索項目,然後通過選擇標籤縮小搜索範圍。 (某種分面搜索)。
與MySQL教程擺弄左右後,我想出了這個:
SELECT `items`.`id`, `items`.`name`, `items`.`pay`, `items`.`desc`
FROM `items`LEFT JOIN (`tags`) ON (`tags`.`item_id`=`items`.`id`)
WHERE (
(`tags`.`type`='food' AND `tags`.`name`='pizza')
OR (`tags`.`type`='drinks' AND `tags`.`name`='lemonade')
--And so on for every tag
)
ORDER BY `pay` DESC LIMIT 0 , 30
(我刪除查詢全文搜索,因爲它是不相關的現在)
它工作得不錯,但我有兩個問題:
- 如果用戶不選擇任何標籤,每一個有更多然後1個標籤項目連接到它顯示了更多的則1次
- 如果用戶選擇兩個標籤,例如食品=>披薩和飲料=>檸檬水,每個包含披薩或檸檬水的食品或兩者都會出現,我只想要那些帶有這些標籤的食品。
是否有可能用不同的mysql查詢解決這些問題?或者我應該在php代碼中修復這些問題。 (或者我是否完全錯了,是否有更好的方式來使用標籤?)
希望我自己清楚。
GR,
巴斯
謝謝,最後的查詢工作完美! – Bas 2010-02-22 17:11:37
順便說一句,這是不錯的MySQL實踐? – Bas 2010-02-22 17:12:41
這是一個很難回答的問題...就性能而言,只要你設置了合適的索引就可以了......我的觀點是,如果它一貫正確地工作,並且對於你的應用程序來說'速度夠快',那就去吧。 – vicatcu 2010-02-22 18:07:36