2011-02-26 40 views
0

這是我previous question的跟進,但略有不同和優劣它自己的問題。加盟MYSQL 3個表和過濾

我有3個表是這樣的:

圖像(〜10,000行)

id | place_id | filename 
---|----------|---------- 
1 |  4 | abc.jpg 
2 |  3 | def.jpg 
3 |  4 | ghi.jpg 
4 |  7 | jkl.jpg 

標籤(約100行)

id | name | 
---|----------| 
1 | tagA | 
2 | tagB | 
3 | tagC | 
4 | tagD | 

tagsToImages(〜30000行)

id | tag_id | image_id 
---|----------|---------- 
1 |  1 | 4 
2 |  3 | 2 
3 |  2 | 4 
4 |  1 | 1 

作爲一個例子,第e最後一個表格顯示id = 1的標籤與id = 4的圖像鏈接。

我想要做的是選擇所有具有某個place_id的圖像,並將每個圖像與列表關聯標籤像這樣:

選擇所有place_id = 4,而加入到標籤信息。

filename | tags  
----------------------- 
    abc.jpg | tagA  
    ghi.jpg | tagA, tagB 

查詢要做到這一點是由a1ex07建議,看起來像這樣:

SELECT i.filename, GROUP_CONCAT(t.name SEPARATOR ',') AS tags 
FROM images i 
INNER JOIN tagsToImages tti ON (tti.image_id = i.id) 
INNER JOIN tags t ON (t.id = tti.tag_id) 
WHERE i.place_id = 4 GROUP BY i.filename 

這是夢幻般的,和作品真的很好。我現在想要做的是通過指定一個標籤和一個地方來過濾這組結果。

我的嘗試:

SELECT i.filename, GROUP_CONCAT(t.name SEPARATOR ',') AS tags 
FROM images i 
INNER JOIN tagsToImages tti ON (tti.image_id = i.id) 
INNER JOIN tags t ON (t.id = tti.tag_id) 
WHERE i.place_id = 4 AND t.id = 3 GROUP BY i.filename 

幾乎工作,但它僅包括專門有標籤ID爲3,而不是圖像有很多的標籤圖像,其中一個具有ID 3.

燦任何一個幫助我?

回答

1

我測試過克里斯C'S答案在MySQL 5.0和它的工作對我的測試數據庫:

SELECT i.filename, GROUP_CONCAT(t.name SEPARATOR ',') AS tags 
FROM images i 
INNER JOIN tagsToImages tti ON (tti.image_id = i.id) 
INNER JOIN tags t ON (t.id = tti.tag_id) 
WHERE i.place_id = 4 AND i.id IN 
(
    SELECT image_id 
    FROM tagsToImages 
    WHERE tag_id = 1 
) GROUP BY i.filename; 

,產生(根據您的問題,給出了數據):

+----------+------+ 
| filename | tags | 
+----------+------+ 
| abc.jpg | tagA | 
+----------+------+ 

你說這個查詢不適合你,那麼你能說出你正在運行哪個數據庫以及哪些數據不工作嗎?

+0

感謝 - 我身邊多一點發揮,而問題是,如果有與文件關聯的多個標籤,只篩選出這一個所示。所提供的數據沒有很好地反映這一點。我會在您需要聲譽時將您的答案標記爲已接受! – 2011-02-27 10:00:45

2

嘗試把一個子查詢WHERE子句中以選擇已經TAG_ID的3 例如任何圖像

WHERE i.place_id = 4 AND i.imageID IN 
(
    SELECT image_id 
    FROM tagsToImages 
    WHERE tag_id = 3 
) 

注 - 還沒有嘗試過這個真正的 - 沒有數據庫在這臺電腦上測試。將檢查和更新後

+0

這似乎並沒有做出結果集可言,這似乎很奇怪任何區別。 – 2011-02-26 19:01:55