带内连接的DISTINCT

时间:2012-06-27 02:39:40

标签: php join

我目前正在为摄影师制作网站,每张照片都标有多个关键字,这些关键字在上传时会被提取。

我的数据库看起来像这样(简化)

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,根据标签“water”,一些图像有“water”,“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 个答案:

答案 0 :(得分: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 ?, ?