2013-01-21 29 views
1

我有一個items表和tags表,它們通過user_tags錶鏈接在一起。我有一個發現與特定標籤的所有項目的查詢:查找在MySQL鏈接表中沒有任何條目的項目

self::factory('item') 
    ->join('user_tags', 'INNER')->on('items.id', '=', 'user_tags.item_id') 
    ->join('tags', 'INNER')->on('user_tags.tag_id', '=', 'tags.id') 
    ->where('tags.title', 'IN', $array_of_tags); 

或不Kohana的ORM:

SELECT items.* 
FROM items 
INNER JOIN user_tags ON items.id = user_tags.item_id 
INNER JOIN tags ON user_tags.tag_id = tags.id 
WHERE tags.title IN ($array_of_tags); 

我想找到有沒有相關的標籤他們的所有項目。我將如何做到這一點?

+0

您有2個標籤table:tags ans user tags?哪些標籤是你不想要的? – GeorgeVremescu

回答

1

只需添加另一個地方條件

SELECT 
    items.* 
FROM items 
LEFT JOIN user_tags ON items.id = user_tags.item_id 
LEFT JOIN tags ON user_tags.tag_id = tags.id 
WHERE tags.title IN ($array_of_tags) 
AND user_tags.tag_id IS NULL; 
0

試試這個::

SELECT items.* 
FROM items 
LEFT JOIN user_tags ON items.id = user_tags.item_id 
LEFT JOIN tags ON user_tags.tag_id = tags.id 
WHERE 
user_tags.tag_id is null 
AND tags.title IN ($array_of_tags) 
+0

內心會不會這樣做 –

+0

爲什麼會降票? –

+0

@raheelshan:感謝您指出它,更新了我的查詢... :-) –

1

切換你的內連接至左連接

SELECT items.* 
FROM items 
LEFT JOIN user_tags ON items.id = user_tags.item_id 
LEFT JOIN tags ON user_tags.tag_id = tags.id 
WHERE (tags.title IN ($array_of_tags) or tags.title is null) 
and user_tags.item_Id is null. 

記住SQL是不是遠遠超過設置邏輯。

這裏有一個鏈接來幫助解釋不同類型的連接。

http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

相關問題