どのようにデザインMySqlテーブルタグクラウドとは何か?
-
25-09-2019 - |
質問
私は記事を自分の敷地の中に、どのようなタグを付与する記ですが、私は困りのデザインmysqlテーブルタグです。私は二つのアイデア:
- そうい分野の"タグ"は、タグにフォーマット:"tag1,tag2,tag3"
- 作成その他のテーブルタグと呼ばれる分野: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
条項があるものになる可能性があ両ラインというものがあ - もちろん、使わないを選択し直して、規格なって--というものは対象外となります。
- などが内部に入場合には、第DBには2つのタグに一致する
- しかし、使用
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は、いくつかの類似点を持っています。