2017-07-27 60 views
0

選擇我有以下表結構:的MySQL按標籤從不同的表

圖像0​​ ID | ...

keyword_relations
id | keyword_id | image_id

關鍵字
id |關鍵字

我該如何選擇是否有人搜索「房子」之類的東西。在搜索「紅屋」(關鍵字「紅色」和關鍵字「房子」)等多個關鍵字時,如何才能顯示包含所有關鍵字的圖片。

我有的查詢不能完美工作,其中一些非常緩慢。

這甚至可能在一個查詢中,或者它會更好地分裂它們嗎?

+0

假設關鍵字的數量可以變化,一種方法是使用字符串連接來構建SQL。如果這不是你的意思,請提供更具體的示例數據。訂單是重要的還是關鍵字可以以任何順序出現? – GurV

+0

顯示你到目前爲止已經嘗試過的,所以我們可以從中解決問題。 –

+0

我只是擺弄不同的方法,但沒有一個似乎是一個很好的解決方案。我認爲,因爲這是一個相當常見的表格結構這樣的信息必須有某種最好的做法,我沒有意識到...... –

回答

0

根據要求,這裏我到目前爲止(簡化)。首先,我從關鍵字關鍵字的ID(搜索字符串分解):
"SELECT id FROM keywords WHERE keyword IN($keywords)"

,從我產生被用於主查詢ID列表:
"SELECT i.* FROM images i JOIN keyword_relations k ON k.image_id = i.id WHERE k.keyword_id IN($kids) GROUP BY i.id HAVING COUNT(k.keyword_id) = $keywordcount"

的COUNT甚至可以使用按相關性排序,相關性是匹配關鍵字的數量。