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