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

Извините, если этот вопрос немного основной, но вот то, что я пытаюсь сделать. Я пытаюсь выбрать десять tag_id из code_tags - эти теги будут десятью, поскольку большинство копий (например, может быть 30 записей с tag_id из 7, поэтому 7 будет выбрано, если это один из самых высоких) , Затем я вставляю два значения в popular_tags: tag_id, и тег подсчитывается для этого тега.

Как это сделать?

+0

Я знаю, что это на самом деле не связано с вашим вопросом, но почему вы используете InnoDB на одном столе и MyISAM на другой? –

ответ

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 не путает его с вызовом функции и не выдает синтаксическую ошибку. Не проверял, хотя. –

+0

Спасибо, что упомянул об этом, я был не совсем уверен! Я много раз перескакиваю между SQL Server и MySQL :) –

3
INSERT INTO popular_tags (id, `count`) 
SELECT tag_id, count(*) FROM codes_tags 
GROUP BY tag_id ORDER BY count(*) DESC LIMIT 10 
Смежные вопросы