posts
테이블과 postmeta
테이블에 meta_key
및 meta_value
열이 포함되어 있습니다. 아래에는 간단한 데모 데이터가 포함 된 간단한 테이블 구조가 포함되어 있습니다.조인 된 테이블의 여러 행으로 조인 된 쿼리를 정렬하는 중
CREATE TABLE `posts` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(200) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
INSERT INTO `posts` (`id`, `title`) VALUES
(1,'First post'),
(2,'Second post'),
(3,'Third post'),
(4,'Fourth post');
CREATE TABLE `postmeta` (
`meta_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`post_id` int(11) NOT NULL,
`meta_key` varchar(200) NOT NULL DEFAULT '',
`meta_value` text NOT NULL,
PRIMARY KEY (`meta_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
INSERT INTO `postmeta` (`meta_id`, `post_id`, `meta_key`, `meta_value`) VALUES
(1,1,'rating','80'),
(2,1,'total_votes','500'),
(3,2,'rating','80'),
(4,2,'total_votes','501'),
(5,3,'rating','95'),
(6,3,'total_votes','200');
등급에 따라 게시물을 정렬해야합니다. 평가가없는 게시물도 포함해야하므로 LEFT JOIN
입니다. 문제 없습니다 :
SELECT *
FROM posts p
LEFT JOIN postmeta m ON p.id = m.post_id AND m.meta_key = 'rating'
ORDER BY m.meta_value DESC
그러나 동일한 등급 게시물에 대한 , 나는 더 postmeta
테이블의 다른 행에 저장되어 카운트 총 투표에 의해 그들을 주문 좋아하는 것이다. 위의 예에서 첫 번째와 두 번째 게시물의 등급은 80이지만 두 번째 게시물의 투표 수가 더 많으므로 첫 번째 게시물보다 먼저 주문해야합니다. 어떻게 하나의 쿼리에서 그걸 풀까요?
신난다! 나는 SQL Fiddle 사이트에도 책갈피를 지정하고 편리하게 올 것이다. 감사! – Geert