質問

私は記事を自分の敷地の中に、どのようなタグを付与する記ですが、私は困りのデザインmysqlテーブルタグです。私は二つのアイデア:

  1. そうい分野の"タグ"は、タグにフォーマット:"tag1,tag2,tag3"
  2. 作成その他のテーブルタグと呼ばれる分野:tag_name,article_id

だいたいタグ記事ID1、実行

SELECT ... FROM tags WHERE `article_id`=1;

でも、たいと思い知ら3に最も類似の記事による比較グでしている場合は第るタグ"php、mysql、gimp用ドキュメ"5品タグ:"php、mysqlデータベース","gettext、ruby","php gettext","mysql、gimp用ドキュメjavascript"、選択から1 3.4., 年3おいても同じタグがメイン。

その他にも質問には、何が取得するための最良の方法であ10"もっとも多く使用されているタグ"?

役に立ちましたか?

解決

一般的には、このような多対多の関係がテーブル:

  • の"article"テーブル
    • primary key=id
  • の"tag"テーブル
    • primary key=id
    • データを含む各タグ:
      • 名前は、例えば
  • A"tags_articles"テーブルとして参加テーブルのみを含む:
    • id_article :海外のキーポイントの記事
    • id_tag :海外のキーポイントタグ


このような複製のタグのデータ各タグでは、唯一の、線の tag 表に示す。

の各条項は、いくつかのタグ(数ラインの tags_articles テーブル);もちろん、各タグでは数。

取得のリストのタグの記事では、この考え方、物のadditionnalクエリのように:

select tag.*
from tag
    inner join tags_articles on tag.id = tags_articles.id_tag
where tags_articles.id_article = 123


っての"最も類似の"記事のう:

  • 選択条ているタグの記事
  • ご利用に限るものとしては最も重要な番号には同一のタグ

試験は行っておりませんが、アイデアがこのようになります:

select article.id, count(*) as nb_identical_tags
from article
    inner join tags_articles on tags_articles.id_article = article.id
    inner join tag on tag.id = tags_articles.id_tag
where tag.name in ('php', 'mysql', 'erlang')
      and article.id <> 123
group by article.id
order by count(*) desc
limit 3

基本的には、す:

  • 選択の論文idの各タグの存在は、期初の記事
    • などが内部に入場合には、第DBには2つのタグに一致する where 条項はなく、 group by 条項があるものになる可能性があ両ラインというものがあ
    • もちろん、使わないを選択し直して、規格なって--というものは対象外となります。
  • しかし、使用 group by article.id, ある線条
    • だがご利用でき count, は、どのように多くのタグの記事ごとに共通の
  • そして、この問題の別のタグは三つです。

他のヒント

まず最初に、あなたがテーブルの設計についてパスカルMARTINの提案を使用することをお勧めします。

同様の記事を見つけることについては、ここでの何かが、あなたが始めています。 @article_idは、あなたがのためにマッチを見つけたい記事があることを考えると、@ TAG1、TAG2 @、@ TAG3その記事のタグがあります:

SELECT article_id, count(*)
FROM tags_articles
WHERE article_id <> @article_id
AND tag_id IN (@tag1, @tag2, @tag3)
GROUP BY article_id
ORDER BY count(*) DESC
LIMIT 3

はい、しかし、あなたは3件の、最も類似した記事?

を取得する方法を、私のメインの質問に答えませんでした

回答: ただ、マージされたテーブル内の同じタグID(tags_articles)を探してください。それらを収集し、パターンを作成します。

例: 第1条には、タグを持っています1,2 第2条にはタグがあります:2,3,4 第5条にはタグがあります:6,7,2 第7条にはタグがあります:7,1,2,3

あなたは、物品1のための3件の最も類似記事をしたい場合は、

は、タグ1,2を探す必要があります。あなたは第7条が最も類似していると2と5は、いくつかの類似点を持っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top