누구든지 mySQL 학습을위한 좋은 책을 추천 할 수 있다면 그것은 좋을 것이다. :)MySQL 쿼리에 어떤 유형의 참여가 있습니까? 확실하지 않음
나는
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
는 내가 뭘하려고 오전 '태그'에서 이름을 선택하고, 'codes_tags'에 얼마나 많은 것을 tag_id의이 두 테이블, 태그, codes_tags이 그 수에 따라 그들을 주문하십시오. 해당 tag_id에 대한 codes_tags에 레코드가 없으면 'count'는 0 또는 NULL (바람직하게는 0)과 같아야합니다.
이것은 내가 지금까지 온 가장 가까운 : 어떻게 생각은 30
을 반환해야 할 때, 그러나 그것은 네 개의 행을 반환, 내가 걸려 일을 할 것 같다
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
여기 잘못있는거야? 감사합니다. .
미안하지만 이미 시도해 보았습니다. 반환 값은 조금 이상합니다. 첫 번째 레코드의 카운트는 185이고 그 다음에는 3의 정확한 카운트가 있습니다.하지만 여전히 4 개의 레코드 만 반환합니다. –
두 번째 SQL 쿼리가 정확히 내가했던 것입니다. 그것이 무엇을하는지 설명해 주시겠습니까? –
첫 번째 SELECT는 tags 및 codes_tags 테이블에있는 모든 이름의 이름과 개수를 가져옵니다. UNION은 더 많은 행을 추가하려고한다고 말합니다 (두 쿼리에서 열 유형과 개수가 동일해야 함). 두 번째 SELECT는 첫 번째 SELECT의 해당 항목에 대해서만 이름과 0 (계수를 나타 내기 위해)을 가져옵니다. WHERE 절은 결과를 첫 번째 쿼리에 포함되지 않은 이름으로 제한합니다. –