2009-08-28 3 views
0

코드 테이블과 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에서 10 개의 tag_id를 선택하려고합니다.이 태그는 가장 많은 복사본이있는 열입니다 (예를 들어 tag_id가 7 인 30 개의 레코드가있을 수 있으므로 가장 높은 경우 7이 선택됩니다) . 그런 다음 popular_tags에 두 개의 값을 삽입합니다. tag_id 및 해당 태그의 태그 수.

어떻게하면됩니까? 이 라인을 따라

+0

나는 이것을 알고 정말 귀하의 질문에 관련이없는,하지만 당신은 왜 다른 하나 개 테이블과의 MyISAM에서 InnoDB의를 사용하고 있습니까? –

답변

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 초 밖에 걸리지 않았다. mysql이 함수 호출과 혼동하지 않고 구문 오류를 던지지 않도록 백 카운트가'count' 칼럼 주위에 필요하다고 생각한다. 그래도 확인하지 않았어. –

+0

그 말을 해주셔서 고맙습니다. 나는 SQL 서버와 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