これは、SOに関する私の最初の質問です。したがって、次の列を持つ posts という名前の MYSQL テーブルがあります。
投稿、タグ 1、タグ 2。
テーブルに合計 10 行あるとします。投稿のうち 9 つは tag1 のみにタグがあり、10 番目の投稿には tag1 と tag2 にタグがあります (tag2 のタグは他の投稿の tag1 に複製されています)。テーブルは次のようになります。
Tag1 Tag2
computer -
tv -
computer -
tv -
laptop -
bicycle -
stereo -
computer laptop
tv -
laptop -
私が望む機能は、テーブルにクエリを実行して、出現頻度が最も高いタグを取得し、それらをグループ化し、頻度が最も高いものから順に並べることです。これが私のmysqlクエリです(私はPDOを使用しています):
SELECT count, tag
FROM (SELECT count(tag1) as count, tag1 as tag FROM posts) as a
UNION ALL
SELECT count(tag2) as count, tag2 as tag
FROM posts
存在する各タグが表示されないため、このクエリは機能しません。また、列 tag2 の 1 つのタグを tag1 の結果に追加しているようには見えず、代わりに重複があります。そのため、ラップトップが 3 回表示されるのではなく、ラップトップが 2 回表示されてから 1 回表示されます。
これは GROUP BY によって解決されると考えましたが、GROUP BY mysql を追加しようとすると、データベース サーバーのドキュメントを参照するようにという一般的な構文エラーがスローされます。したがって、GROUP BY をどこに置くべきかわからないと思います。また、クエリがまったく正しくないと考えている可能性があります。利用可能なヘルプをお願いします....ユニオンでグループを使用することに関する他の多くの質問を調べましたが、答えが見つからないか、答えが見えたときに知るのに十分な理解がありません。