0

私のデータベースには、記事名と記事タグのある記事のテーブルがあります。記事タグは、「人、人生、大統領」のようなタグが含まれる文字列列です。すべての記事はこの方法でタグ付けされます。

今、私は記事の全人口のために10の最も人気のあるタグを取得したいと思います。これを行う方法?

4

2 に答える 2

8

可能性がある場合は、データベーススキーマを変更して、articleテーブル、tagテーブル、およびarticle_tagsテーブルを作成することをお勧めします。

これにより、特に記事が多い場合に、タグのマッチングがはるかに効率的になります(実行したいタグなど)。

現在の設計では、(おそらく大きな)記事テーブルを完全に反復処理し、タグのヒープを維持することに固執しています(一時テーブルを介して-この場合はストアドプロシージャを介して実行できます-またはアプリケーションコードで) )。全体は本当に非効率的です。

于 2009-12-05T16:49:05.720 に答える
1

データベースを正規化し、別のタグテーブルを作成すると、はるかに簡単になります。たとえば、次のようなデータベースがある場合:

article
    article_id
    article_title
    article_content

article_tag
    tag_name
    article_id
    UNIQUE INDEX (tag_name, article_id)
    UNIQUE INDEX (article_id, tag_name) # in order to perform fast lookups in both directions

(これは、とtagを含む-tableを作成し、 inに置き換えることで、さらに正規化できる可能性があります。)tag_nametag_idtag_nametag_idarticle_tag

これで、次のようなクエリを使用して、最も人気のあるタグのリストを表示できます。

SELECT tag_name, count(article_id) c 
  FROM article_tag
  GROUP BY tag_name
  ORDER BY c DESC
  LIMIT 10
于 2009-12-05T16:51:43.677 に答える