誰かがmySQLを学ぶための良い本も推薦できれば、それは素晴らしいことです:)。
私は2つのテーブル、タグ、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
私がやろうとしているのは、「tags」から名前を選択し、「codes_tags」にそのtag_idがいくつあるかを選択し、その数で並べ替えることです。そのtag_idのcodes_tagsにレコードがない場合、「count」は0またはNULL(できれば0)に等しくなければなりません。
これは私がこれまでに来た中で最も近いものです:
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
私が望んでいることを実行しているようですが、30を返す必要があるのに4行しか返していません。
私はここで何が間違っているのですか?ありがとう。