私は現在、写真家のウェブサイトに取り組んでいます。すべての写真には、アップロード時に抽出される複数のキーワードがタグ付けされています。
私のデータベースは次のようになります(簡略化)
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 ?, ?