3

これが 1 つの MySQL クエリだけで可能かどうか疑問に思っています。

私が作っているのはタグ付けシステムです。したがって、次の 2 つのテーブルがあります。

Tags, id | heading

Tagged, id | image_id | tag_id | timestamp | strength

すべてが正常に機能しますが、タグをユーザーに表示する段階に達し、タグが使用された回数で並べ替える予定です。

つまり、一言で言えば、次のことを行うものが必要です。

  1. 表示されている現在の画像のすべてのタグを取得しますid = 34
  2. タグが使用された回数をカウントします。
  3. これらの結果の高いものから低いものへと、タグ リストを並べ替えます。

ジョイン、レフト ジョインなどを調べてみましたが、どれも圧倒されそうで、なかなか理解できません。

誰かがこれを簡単に行う方法を説明できれば、それは素晴らしいことです!

編集

私は現在これを持っています

SELECT tags.id, COUNT( tagged.id ) AS count
FROM tags
INNER JOIN tagged ON tags.id = tagged.tag_id
WHERE tagged.image_id =  '1'
GROUP BY tags.id
ORDER BY count DESC 

これは、タグが現在の image_id にタグ付けされた回数のみを返します。すべての画像から数えるようにするにはどうすればよいですか?

4

4 に答える 4

1

を使用GROUP BYして、同じタグをグループ化し、COUNT()それらをカウントするために使用できます。

  SELECT tags.id  as id,
         COUNT(1) as cnt
    FROM tags INNER JOIN tagged
      ON tags.id = tagged.tag_id
GROUP BY tags.id
ORDER BY cnt DESC

正確には次のとおりです。

  • 結合はタグ付きの各エントリを取得し、対応するタグとペアにします。
  • 次に、各 ID に対して 1 つのエントリのみを取得するように、タグ ID でグループ化します。
  • このCOUNT関数は、各グループに含まれる要素の数をカウントします。
  • 最後に、カウントの降順で並べ替え、最も人気のあるタグを一番上に表示します。

さらに、各画像を複数のタグでタグ付けできるようにする場合は、画像情報を独自のテーブルに移動し、2 つをリンクするだけのテーブルを作成します。

于 2012-08-06T20:08:34.787 に答える
1

SQL クエリを最適化して、作業を行うことができます。

SELECT tags.id, COUNT(id) AS count
FROM tags
INNER JOIN tagged ON tags.id = tagged.tag_id
WHERE tagged.image_id = 34;
GROUP BY tags.id

これにより、イメージ ID でタグ付けされるように設定されているすべてのタグが選択され、34そのタグを使用してイメージの総数が取得されます。JOIN の視覚的な説明

于 2012-08-06T20:14:09.887 に答える
0

タグのグローバルな使用法を取得するには、元のタグ付きテーブルにwhere条件を適用しているため、おそらくタグ付きテーブルに再参加する必要があります。これを試して:

SELECT 
    t2.id,
    COUNT(t3.tag_id) AS global_count,
    GROUP_CONCAT(t3.image_id) AS images_with_tag
FROM 
    tagged t1
    JOIN tags t2 ON t2.id = t1.tag_id
    LEFT JOIN tagged t3 ON t3.tag_id = t2.id
WHERE t1.image_id = 1
GROUP BY t2.id
ORDER BY global_count DESC 
于 2012-08-06T22:18:10.420 に答える
0

おそらく、通常「正規化」と呼ばれる、2 つのテーブル間の関係を保持する中間テーブルが必要な段階に来ています。

tag_image_table
=========

tag | image
===========
1 | 23
99| 23

これは、2 つのタグに関連付けられた画像 #23 を表します。

これにより、タグに関連付けられたすべての画像と、画像に関連付けられたすべてのタグを簡単に選択できるようになります。

于 2012-08-06T20:10:51.527 に答える