0

私が持っているものは次のとおりです。

  1. 画像、タグ、tag_names、ダウンロードなどのテーブルがあります

  2. 複数のタグを持つことができ、別のテーブルにある画像

  3. downloads テーブルは、イメージの合計ダウンロードを維持します

ここまでで、私のテーブル定義の目的を理解していただけたと思います


私が必要とするのは:

  1. すべての画像のリストを作成するときにタグを表示する必要があります。たとえば、1 ページに 10 個の画像を表示していて、各画像の下にすべてのタグを表示したいとします。(これが1つのクエリ結果では不可能であると仮定します。そうであれば、他の手段がいいでしょう

  2. ブログ投稿ページのように1枚の画像を別ページとして表示するとき、スタックオーバーフローのようにすべてのタグを表示したい。


テーブル構造は次のとおりです。

画像テーブル

イメージ ID | 名前 |

1 | サンプル1
2 | サンプル2
3 | サンプル3
4 | サンプル3

................................................

タグ名テーブル

タグ ID | 名前

1 | タグ名1
2 | タグ名2
3 | タグ名3
4 | タグ名3

................................................

タグ表

ID | イメージ ID | タギッド

1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 2 | 1
5 | 3 | 4

................................................

ダウンロード表

ID | イメージ ID | ダウンロード

1 | 1 | 5
1 | 2 | 3

................................................

注: ... 他の画像にはこの表の参照はありませんが、画像には少なくとも 1 つのタグが必ずあります

ここで、ダウンロード テーブルのパフォーマンスに関する質問があります。ダウンロード テーブルに id と imageid だけを指定してダウンロードごとに行を追加するか、別のフィールドを作成して上記のテーブルの例のように増分するか - 個別の質問としてこれを行う必要があるかもしれません。その場合は、この段落を無視してください.


それが可能な場合は、提案/アドバイスしてください。そうでない場合は、代替案を提案してください。

4

1 に答える 1

3
select image_name, GRP_CONCAT(tag_name)
from images, tags, tagnames
where tags.image_id = images.image_id
and tags.tag_id = tagnames.tag_id 
group by image_name

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

クエリは、画像名と、画像に含まれるすべてのタグをカンマで区切った文字列で返す必要があります。Group_CONCAT()関数のドキュメントを参照して、構文を確認してください。デリメータを変更することもできます。

于 2012-11-26T06:35:02.207 に答える