2009-08-28 78 views
0

我有两个表:codes_tags和popular_tags。MySQL选择计数

codes_tags

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 

popular_tags

CREATE TABLE `popular_tags` (
`id` int(10) unsigned DEFAULT NULL, 
`count` int(10) unsigned DEFAULT NULL, 
KEY `id` (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 

很抱歉,如果这个问题是有点基本的,但这里是我想要做的事。我试图从code_tags中选择十个tag_id - 这些标签将是十个最多拷贝的拷贝(例如,可能有30个tag_id为7的记录,因此如果这是最高的一个,将选择7) 。然后,我将两个值插入到popular_tags中:tag_id和该标记的标记计数。

我该怎么做?

+0

我知道这是不是真的与你的问题,但是为什么你在一个表和MyISAM对其他使用InnoDB的? – 2009-08-28 05:33:40

回答

4

这些方针的东西:

insert into popular_tags (id, `count`) 
select 
    tag_id, 
    count(*), 
from codes_tags 
group by 
    tag_id 
order by 
    count(*) desc 
limit 10 
+2

我只差20秒......我想你可能需要'count'列的反引号,这样mysql不会将它与函数调用混淆并抛出语法错误。虽然没有检查过。 – 2009-08-28 05:43:17

+0

谢谢你提到,我不太确定!我经常在SQL Server和MySQL之间跳转:) – 2009-08-28 05:49:02

3
INSERT INTO popular_tags (id, `count`) 
SELECT tag_id, count(*) FROM codes_tags 
GROUP BY tag_id ORDER BY count(*) DESC LIMIT 10