자체 참조 테이블에서 주문 기준
(이런 기사에 대한) 코멘트 표가 있습니다.
---------------------------------------------------------------
id |comment_id |likes_count |add_time
---------------------------------------------------------------
0 NULL 0 time0
1 NULL 2 time1
2 0 0 time2
3 0 0 time3
4 NULL 1 time4
5 1 0 time5
그comment_id
를 참조하고 있습니다.id
같은 테이블에서요.언제comment_id
는 NULL 입니다.이것은 이 코멘트가 부모(다른 코멘트에 대한 응답이 아니라 기사 자체에 대한 응답)임을 의미합니다.다만, NULL이 아닌 경우는, 이 코멘트가 자녀(기사의 다른 코멘트에 대한 응답)임을 의미합니다.
사용 중인 쿼리는 각 자녀가 부모 아래에 표시되는 방식으로 결과를 정렬합니다.
SELECT *
FROM comments
ORDER BY
COALESCE (comment_id, id) DESC,
(comment_id IS NULL) DESC,
likes_count DESC
하지만 어떻게 부모 코멘트를 해야 할지 모르겠다(자녀가 따라하는 경우)likes_count
결과에서 가장 먼저 나타납니다.likes_count DESC
결과는 항상 에 의해 지시되기 때문에 효과가 없는 것 같습니다.id
.
쿼리에서 반환된 결과:
---------------------------------------------------------------
id |comment_id |likes_count |add_time
---------------------------------------------------------------
0 NULL 0 time0
2 0 0 time2
3 0 0 time3
1 NULL 2 time1
5 1 0 time5
4 NULL 1 time4
예상 결과:
---------------------------------------------------------------
id |comment_id |likes_count |add_time
---------------------------------------------------------------
1 NULL 2 time1
5 1 0 time5
4 NULL 1 time4
0 NULL 0 time0
2 0 0 time2
3 0 0 time3
phpMyAdmin은 다음 정보를 표시합니다.
서버 유형:마리아DB
서버 버전: 10.1.40-MariaDB-cll-lve - MariaDB
서버 프로토콜 버전: 10
cpsrvd 11.78.0.34
데이터베이스 클라이언트버전: libmysql - 5.1.73
PHP 버전: 7.2.7
phpMyAdmin: 4.8.3
각 부모 자녀 그룹에 대해 최대 좋아요 수를 사용하여 정렬 수준을 추가할 수 있습니다.
SELECT *
FROM comments
ORDER BY
MAX(likes_count) OVER (PARTITION BY COALESCE(comment_id, id)) DESC,
COALESCE (comment_id, id) DESC,
comment_id IS NULL DESC;
데이터베이스(실제로 어떤 것이든)가 분석 기능을 지원하지 않는 경우 조인(join)을 사용하여 동일한 논리를 수행할 수 있습니다.
SELECT c1.*
FROM comments c1
INNER JOIN comments c2
ON COALESCE(c1.comment_id, c1.id) = c2.id
ORDER BY
c2.likes_count DESC,
COALESCE (c1.comment_id, c1.id) DESC,
c1.comment_id IS NULL DESC;
언급URL : https://stackoverflow.com/questions/57131912/order-by-in-a-self-referencing-table
'it-source' 카테고리의 다른 글
항상 소수점 2자리를 표시하는 형식 번호 (0) | 2023.02.02 |
---|---|
Aria(MariaDB)에서 트랜잭션을 활성화하려면 어떻게 해야 합니까? (0) | 2023.02.02 |
빈 문자열의 "분할"이 비어 있지 않은 어레이를 반환하는 이유는 무엇입니까? (0) | 2023.02.02 |
larabel 지원되는 암호화기를 찾을 수 없습니다.암호 및/또는 키 길이가 잘못되었습니다. (0) | 2023.02.02 |
PHP '테이블 만들기' 테이블 이름에 따옴표가 포함되어 있습니다. (0) | 2023.02.02 |