2013-10-27 61 views
0

好了,可以說我有3個表...需要幫助添加過濾器到MySQL搜索查詢

一個叫media,每行都有media_id主索引。

一個叫做keywords,每一行都有一個主索引keyword_id。最後,我有另一個表keylinks。沒有主要索引,但有一個獨特索引media_id + keyword_id。您大概可以猜測,此表格是鏈接到媒體的關鍵字的索引。這個想法是關鍵字可以鏈接到多個媒體片段,以便用戶可以根據他們鏈接的關鍵字瀏覽媒體。

現在,我做了以下去取掛的6的keyword_id媒體:

SELECT media.*, keywords.* 
FROM media 
    LEFT JOIN keylinks ON (keylinks.media_id = media.media_id) 
    LEFT JOIN keywords ON (keywords.keyword_id = keylinks.keyword_id) 
WHERE keywords.keyword_id = '6' 

這個偉大的工程,如果我只想要回被6鏈接結果。但是,如果我想要查找不僅鏈接到6的keyword_id而且鏈接到第二個(或第三個等)keyword_id的媒體。

我的問題是我將如何檢索具有keylink 6和可能8的媒體列表。

在此先感謝。

+0

「keylink to both 6 and possible 8」?你的意思是「同時連接6和8」,對吧? –

+0

是的,多數民衆贊成在我的意思是...獲取鏈接到'6'和'8'的媒體列表...以及添加更多的能力。所以,如果我想我可以做'6'和'8'和'12'等... –

回答

0

我相信這是你想要的。

SELECT * 
FROM media 
WHERE media_id IN (
    SELECT media_id FROM keylinks WHERE keyword_id = '6' 
) AND media_id IN (
    SELECT media_id FROM keylinks WHERE keyword_id = '8' 
) 
+0

謝謝!這正是我正在尋找的......雖然看起來有點資源密集。這是否有一個更輕的方法? –

+0

當你說「看起來有點資源密集型」時,你會說因爲直覺還是分析? –

+0

我的意思是它將爲每個結果添加兩個選擇查詢。如果我得到50個結果......那就是每頁100個額外的查詢。 –