2009-08-28 79 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