나는 테이블이 post
있고 comment
게시 할 외래 키 (post_id)가 있습니다. 100 개의 "범프 주문"게시물 항목을 얻고 싶습니다. 최근 댓글 항목이 작성된 게시물 항목이 먼저 표시됩니다. 나의 첫 번째 시도는 :
SELECT * FROM post WHERE id IN
(
SELECT DISTINCT post_id FROM comment
ORDER BY created_time DESC
LIMIT 100
);
보고: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
두 번째 시도 :
SELECT * FROM post WHERE id IN
(
SELECT post_id from
(SELECT DISTINCT(post_id), posted FROM comment) AS c
ORDER BY c.created_time DESC
LIMIT 100
);
이번에는 오류가 없지만 내가 원하는 것을하지 않습니다. SQL이 원하는 작업을 수행하도록하려면 어떻게해야합니까?
가장 최근 댓글이있는 게시물 100 개를 선택하려는 경우 집계를 사용할 수 있습니다.
select p.id, p.title, p.author
from posts p
inner join comments c on c.post_id = p.id
group by p.id, p.title, p.author
order by max(c.created_at) desc
limit 100
이 기술을 사용하면 모든 열거 할 필요 posts
는의 결과 집합에 표시 할 것을 열을 select
절 하고 에있는 group by
절.
또 다른 옵션은 다음을 사전 집계하는 것입니다.
select p.*
from posts p
inner join (
select post_id, max(created_at) max_created_at
from comments
group by post_id
order by max(created_at) desc
limit 100
) c on c.post_id = p.id
order by c.max_created_at desc
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다