2010-02-23 185 views
2

嗨我不能找出任何好方法來獲取tag.names和lang的列表,這些列表還沒有在images_urls中組合插入。MySQL查詢幫助

我的數據庫看起來像這樣。

 
tags 

    name user_id 
+-------+---------+ 
|hi  | 1 | 
|friend | 1 | 
|friend | 2 | 
|people | 2 | 
+-------+---------+ 

users 

id lang 
+---+------+ 
| 1 | en | 
| 2 | sv | 
+---+------+ 

images_urls 

    name  lang 
+--------+------+ 
| hi  | en | 
| friend | sv | 
+--------+------+ 

我想什麼又回到是:

 
result 

name  lang 
+-------+------+ 
|friend | en | 
|people | sv | 
+-------+------+ 

我已經試過這樣的事情:

SELECT tags.name, users.lang 
FROM tags, users 
WHERE tags.user_id = users.id 
AND CONCAT(tags.name, ',', users.lang) NOT IN(
    SELECT DISTINCT CONCAT(name, ',', lang) FROM images_urls 
) 
GROUP BY CONCAT(name, ',', lang) 
ORDER BY SUM(tags.count) DESC 
LIMIT 20; 

感謝。

回答

2

我不知道爲什麼images_urls有一個名字,而不是一個user_id,但這應該工作:

SELECT t.name, u.lang 
FROM tags t 
JOIN users u ON (u.id = t.user_id) 
LEFT JOIN images_urls iu ON (iu.name=t.name AND iu.lang=u.lang) 
WHERE iu.name IS NULL 

使用LEFT JOIN回報NULL對於不存在images_urls行,所以我檢查那個。

+0

這似乎工作。 images_urls具有名稱,因爲圖像表示標籤而不是用戶。 – 2010-02-24 09:34:41

1
SELECT tags.name, users.lang 
FROM tags, users 
WHERE tags.user_id = users.id 
AND users.name NOT IN (SELECT name from images_urls); 

我會建議images_urls應該包含user_id不是名稱,但那是一個不同的問題。

列NOT IN( 'name`', 'NAME1', 'NAME2', 'NAME3')

也適用於測試目的。

+0

我懷疑這會返回正確的結果。在這個例子中,它不會返回'friend en',因爲有'friend'的image_url'(但不是正確的)。 – 2010-02-23 16:39:51

+0

啊,對。這是一個瘋狂的設計。 – MindStalker 2010-02-24 02:14:17