강조 표시된 날짜 게시물이 먼저 정렬된 데이터베이스에서 뉴스 게시물 선택
커스텀 뉴스 피드 컴포넌트를 구축하고 있으며 강조 표시된 게시물의 개념을 구현하려고 합니다.표의 예를 다음에 나타냅니다.
아이디 | 직함 | 내용 | post_date | 하이라이트_날짜 |
---|---|---|---|---|
1 | 테스트 1 | ... | 2021-10-01 06:12:00 |
null |
2 | 테스트 2 | ... | 2021-10-02 08:54:00 |
null |
3 | 테스트 3 | ... | 2021-10-03 13:52:00 |
2021-11-30 00:00:00 |
4 | 테스트 4 | ... | 2021-10-04 15:32:00 |
null |
데이터를 가져올 때 다음 방법으로 주문할 수 있습니다.post_date DESC
단, 강조 표시된 게시물은 오늘 날짜가 강조 표시된 날짜 이전인 경우에만 맨 위에 표시되어야 합니다.오늘 날짜가 강조 표시된 날짜 이후인 경우 해당 날짜는 무시되고 다음 날짜 내에 자연스럽게 표시됩니다.post_date
종류.
예를 들어, 아래 쿼리는 작동하지 않습니다. 강조 표시된 게시물은 항상 먼저 나타나기 때문입니다.highlight_date
소멸했습니다.
select * from post
order by post_date desc, highlight_date asc
limit 20
이것을 2개의 쿼리(하나는 강조표시 전용, 1개는 일반 전용)로 분할해, 애플리케이션내에서 2개를 합성할 수 있지만, 페이지 번호부여/무한 스크롤과 함께 사용하기 위한 실장은, 현재, 사용의 메리트가 없기 때문에 어렵습니다.LIMIT
그리고.OFFSET
제 질문에는요.
위의 예제 데이터를 사용하여 결과 주문이 어디에 배치될지 쿼리를 작성하려고 합니다.[3, 4, 2, 1]
2021-11-31 이전 날짜의 경우[4, 3, 2, 1]
다음 날짜로.
시간이 지날수록 이 테이블이 커질 것으로 예상되기 때문에 어떻게 하면 효율적으로 진행할 수 있을지 잘 모르겠습니다.어떤 방향이나 도움을 주셔도 좋습니다!TIA!
SELECT * FROM post
ORDER BY CASE WHEN highlight_date > NOW() THEN 0 ELSE 1 END, post_date DESC
LIMIT 20
SQL:
SELECT *,
COALESCE(highlight_date > NOW(),0) highlight
FROM post
ORDER
BY highlight DESC , id DESC
내 데이트는 NOW2021-10-01 23:06:00
NOW()가 highlight_date보다 낮은 경우의 결과
NOW()가 highlight_date보다 클 때 결과
설명:
COALESCE
비교에 필요합니다.NULL
데이터입니다.왜냐하면NULL
비교해서date
그 결과는 다음과 같습니다.NULL
.그리고.0
보다 크다NULL
병합하지 않은 잘못된 결과:
SELECT *,
highlight_date > NOW() highlight
FROM post
ORDER
BY highlight DESC , id DESC
언급URL : https://stackoverflow.com/questions/69400517/select-news-posts-from-a-database-with-a-highlighted-date-posts-sorted-first
'programing' 카테고리의 다른 글
JavaScript에서 인터넷 속도를 감지하는 방법 (0) | 2023.01.03 |
---|---|
문자열의 마지막 문자를 가져오려면 어떻게 해야 합니까? (0) | 2022.12.29 |
sudo 없이 mysql 서버에 연결 (0) | 2022.12.29 |
Python MySql 삽입이 작동하지 않음 (0) | 2022.12.29 |
오류 UnicodeDecodeError: 'utf-8' 코덱이 0의 바이트 0xff를 디코딩할 수 없습니다. 잘못된 시작 바이트입니다. (0) | 2022.12.29 |