1

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

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

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,基于标签“水”,一些图像具有诸如“水”、“水沃格尔”、“水环”之类的关键字。

有没有办法让 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 ?, ?
4

1 回答 1

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 ?, ?
于 2012-06-27T02:49:35.210 回答