誰もがmySQLの学習のために良い本を推薦できれば、それは素晴らしいだろう:)。MySQL Queryにはいくつかのタイプの結合がありますか?わからない
私は私がやろうとしていますどのような二つのテーブル、タグ、codes_tags
CREATE TABLE `tags` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=190 DEFAULT CHARSET=utf8
CREATE TABLE `codes_tags` (
`code_id` int(11) unsigned NOT NULL,
`tag_id` int(11) unsigned NOT NULL,
KEY `sourcecode_id` (`code_id`),
KEY `tag_id` (`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
を持っては「タグ」から名前を選択し、どのように多くのことTAG_IDの「codes_tags」でありますその数だけ注文してください。そのtag_idのcodes_tagsにレコードがない場合、 'count'は0またはNULL(好ましくは0)に等しくなければなりません。
これは、私がこれまでに来た最も近い:私が何だそれは30
を返すべきときしかし、それは唯一の4行を返して、私が望んでい何をやっているようだ
SELECT tags.name, COUNT(codes_tags.tag_id) AS count
FROM tags
LEFT JOIN codes_tags ON tags.id = codes_tags.tag_id
GROUP BY tag_id
ORDER BY count DESC
LIMIT 0 , 30
ここで間違っている?おかげさまで
申し訳ありませんが、私はすでにそれを試みました。それが返すのはちょっと変わったものです。最初のレコードのカウントは185です。その後、正しいカウントが1のレコードが3つあります。しかし、それでも4行しか返しません。 –
あなたの2番目のSQLクエリは、まさに私の後でした。あなたはそれが何をしているのか説明できますか? –
最初のSELECTは、tagsタグとcodes_tagsテーブルの両方に存在するすべての名前の名前と数を取得します。 UNIONでは、さらに行を追加したいとしています(列の型と数は両方のクエリで同じでなければならないことに注意してください)。 2番目のSELECTは、最初のSELECTの項目のうち、名前と0(カウントを表す)を取得します。 WHERE句は、結果を最初のクエリに含まれていない名前に限定します。 –