【发布时间】:2009-09-01 05:04:50
【问题描述】:
如果有人能推荐一本学习mySQL的好书,那就太好了:)。
我有两个表,tags,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,并按该数量排序。如果code_tags中没有该tag_id的记录,'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 时它只返回四行。
我在这里做错了什么? 谢谢。
【问题讨论】: