2016-02-22 1 views
7

私のウェブサイトには3つの大きなセクションがあります:人々がディスカッションを開始できるセクション、ストーリーを共有できるセクション、自分で書いた記事のブログです。私は、以下のデータベース構造を使ってカスタムタグシステムを構築しました。私tags_xrefテーブルで正規化されたテーブルから最も人気の高いタグを取得するにはどうすればよいですか?

a busy cat

議論はストーリーや記事と同じIDを持つことができるので、私は、各ポストタイプのために3種類の列を持つことが必要。

すべてが正常に動作していますが、特定のタグを表示するためにクエリに問題があります。私はすでに議論のセクションで最も人気のあるタグを表示する方法を知っている:

"SELECT t.id, t.tag, COUNT(discussion_id) AS cnt 
    FROM tags_xref AS xrf 
    INNER JOIN tags AS t ON xrf.tag_id = t.id 
    GROUP BY t.id, t.tag 
    ORDER BY COUNT(discussion_id) DESC LIMIT 20" 

今、私は議論、物語や記事から、全体のウェブサイト上で最も人気のあるタグを示したいと思います。これで私を助けることができる人はいますか?私はこれを何時間も働いており、解決策を見つけることができないようです..ありがとう!

+0

ここですべてのテーブル作成クエリにサンプルデータを入力してください。 –

答えて

4

はあなたのクエリに簡単な修正を行うことができます:彼らは適切でないとき

SELECT t.id, t.tag, COUNT(*) AS cnt 
FROM tags_xref xrf INNER JOIN 
    tags t 
    ON xrf.tag_id = t.id 
GROUP BY t.id, t.tag 
ORDER BY COUNT(*) DESC 
LIMIT 20; 

おそらく、様々なIDSはNULLです。いくつかの奇妙な理由で、特定の外部参照に対して3つのIDにすべての値を実際に格納している場合は、次の操作を実行できます。

SELECT t.id, t.tag, 
     (COUNT(story_id) + COUNT(discussion_id) + COUNT(article_id)) AS cnt 
FROM tags_xref xrf INNER JOIN 
    tags t 
    ON xrf.tag_id = t.id 
GROUP BY t.id, t.tag 
ORDER BY cnt DESC 
LIMIT 20; 
+0

あなたは私のヒーローです、これは完全に動作します!確かに、適切でないIDは通常NULLですが、私はその安全を築きます。再度、感謝します! –

関連する問題