あなたのお問い合わせは私のために間違いなく動作します。 クエリを実行したときにどのようなエラーが発生するのですか/なぜ成功しませんでしたか?
これはあなたの状況設定する私の試みです:あなたがタグでカウントを集計しているので、それはSELECT *
に意味がありません。しかし
+---------+-------------+------------------------+-------------+---------------+---------+--------+--------+----------+------------+
| news_id | category_ID | title | category_id | category_name | news_id | tag_id | tag_id | tag_name | news_count |
+---------+-------------+------------------------+-------------+---------------+---------+--------+--------+----------+------------+
| 1 | 1 | politics and general 1 | 1 | politics | 1 | 1 | 1 | general | 4 |
| 5 | 2 | science and general 1 | 2 | science | 5 | 1 | 1 | general | 2 |
| 7 | 2 | science and funny 1 | 2 | science | 7 | 2 | 2 | funny | 1 |
+---------+-------------+------------------------+-------------+---------------+---------+--------+--------+----------+------------+
:クエリの
mysql> select * from news;
+---------+-------------+------------------------+
| news_id | category_ID | title |
+---------+-------------+------------------------+
| 1 | 1 | politics and general 1 |
| 2 | 1 | politics and general 2 |
| 3 | 1 | politics and general 3 |
| 4 | 1 | politics and general 4 |
| 5 | 2 | science and general 1 |
| 6 | 2 | science and general 2 |
| 7 | 2 | science and funny 1 |
+---------+-------------+------------------------+
mysql> select * from tags;
+--------+----------+
| tag_id | tag_name |
+--------+----------+
| 1 | general |
| 2 | funny |
+--------+----------+
mysql> select * from news_tags;
+---------+--------+
| news_id | tag_id |
+---------+--------+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 1 |
| 7 | 2 |
+---------+--------+
mysql> select * from categories;
+-------------+---------------+
| category_id | category_name |
+-------------+---------------+
| 1 | politics |
| 2 | science |
+-------------+---------------+
の検索結果を/カテゴリとtitle
のようなものは集約されても意味がありません。
あなたは試してみてください:
SELECT c.category_name, t.tag_name, COUNT(n.news_id) AS news_count FROM news AS n
LEFT JOIN categories AS c ON n.category_id = c.category_id
LEFT JOIN news_tags AS tn ON n.news_id = tn.news_id
LEFT JOIN tags AS t ON tn.tag_id = t.tag_id
GROUP BY t.tag_id, c.category_id;
を取得するには:
+---------------+----------+------------+
| category_name | tag_name | news_count |
+---------------+----------+------------+
| politics | general | 4 |
| science | general | 2 |
| science | funny | 1 |
+---------------+----------+------------+
側の注意を:あなたが記事を書くとき、私はちょうどstackoverflowの編集ツールバーの 'ブロックquote'ブツをdiscovere ...私はちょうど永久に手動ですべての前面に4つのスペースを追加することを費やした!ああ! –
まあ...私のクエリでは何のエラーも出ませんが、うまくいきますが、悪い結果を得ていると思いました。今私は実際に正しい結果が得られていることに気がついたが、すべてのデータを選択したため(テスト目的のみ)、私の目はこれを見たことがなく、何か悪いことを数えた。さて、これを申し訳なく思って、これを私に明らかにしてくれてありがとう。 –