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でわかるように、タグ「水」に基づいて、一部の画像には「水」、「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 ?, ?
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 に答える