1
我目前正在爲一位攝影師設計一個網站,每張照片都標有多個上傳時提取的關鍵字。DISTINCT加內部連接
我的數據庫看起來像這樣(簡體)
TAGS
-------------------
| | |
| | |
| ID | TAG |
| | |
| | |
-------------------
IMAGES
-------------------
| | |
| | |
| ID | URL |
| | |
| | |
-------------------
TAGS_IMAGES
-------------------
| | |
| TAG | IMAGE |
| ID | ID |
| | |
| | |
-------------------
因此,所有的標籤都存儲在一個分離式表,以防止重複時,同樣適用於圖像,然後標記和圖像在另一張表連接在一起。
當標籤搜索,我執行這個SQL找到根據給定的標籤
SELECT DISTINCT SQL_CALC_FOUND_ROWS tags.tag, tags_image.imageID, images.src FROM tags INNER JOIN tags_image ON tags.tagID = tags_image.tagID INNER JOIN images ON tags_image.imageID = images.id WHERE tag LIKE ? ORDER BY id DESC LIMIT ?, ?
所有圖像,但問題是,我仍然獲得多個副本,因爲僅DISTINCT似乎工作的tag.id.
正如你在這裏看到的:http://pastebin.com/MWt5B0Aq,基於標籤「水」,一些圖像有像「水」,「watervogel」,「waterloop」這樣的關鍵詞。
有沒有辦法讓DISTINCT工作在images.id?
我嘗試這樣做,但是這並沒有幫助
SELECT DISTINCT images.id SQL_CALC_FOUND_ROWS tags.tag, tags_image.imageID, images.src FROM tags INNER JOIN tags_image ON tags.tagID = tags_image.tagID INNER JOIN images ON tags_image.imageID = images.id WHERE tag LIKE ? ORDER BY id DESC LIMIT ?, ?
這確實似乎有幫助,不知道爲什麼我沒有想到這一點 –