我目前正在为摄影师制作一个网站,每张照片都带有多个关键字,这些关键字在上传时会被提取出来。
我的数据库看起来像这样(简化)
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 ?, ?