2012-06-27 56 views
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 ?, ? 

回答

1

將通過幫助做一組?

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 ? GROUP BY images.id ORDER BY id DESC LIMIT ?, ? 
+0

這確實似乎有幫助,不知道爲什麼我沒有想到這一點 –