-1

3つのテーブルを持つデータベースがあります

フィールドを持つ記事: id: int name: varchar(255) text: text

フィールドを持つタグ: id: int name: varchar(255))

次のフィールドを持つ article_tag: id: int article_id: int (外部キー => article.id) tag_id: int (外部キー => tag.id)

複数のタグに関連付けられた記事を検索できるようにしたい。

私が行った場合:

SELECT article.name FROM article 
JOIN article_tag ON article.id = article_tag.article_id
JOIN tag  ON tag.id = article_tag.tag_id
WHERE tag.name  IN ('science', 'technology', ... );

私はすべての記事を返します*(それが持っているタグの数); これは予想されていました。

私の質問: article.id の頻度の降順でリストされるように (リスト内の上位にあるほど、一致するタグの要求が多くなるという効果で)、またはレコードのみを返すように、それを改良する方法はありますか?すべてのタグに一致します (結果の出現数 = タグの数)。

ありがとう、申し訳ありませんが、この質問はより適切にフォーマットされていませんでした

4

2 に答える 2

0

繰り返し記事の数を取得して並べ替える

SELECT article.name ,COUNT( article.name) AS acount FROM article 
JOIN article_tag ON article.id = article_tag.article_id
JOIN tag  ON tag.id = article_tag.tag_id
WHERE tag.name  IN ('science', 'technology', ... )
GROUP BY article.name
ORDER BY acount DESC
于 2013-08-16T21:58:47.657 に答える