MySQL 테이블을 두 열로 어떻게 정렬합니까?
내가 원하는 것은 먼저 가장 높은 등급으로 정렬 된 다음 가장 최근 날짜로 정렬 된 기사입니다. 예를 들어, 이것은 샘플 출력입니다 (왼쪽 #는 평가, 기사 제목, 기사 날짜).
50 | 이 기사는 바위 | 2009 년 2 월 4 일 35 | 이 기사는 꽤 좋다 | 2009 년 2 월 1 일 5 | 이 기사는 뜨겁지 않다 | 2009 년 1 월 25 일
사용중인 관련 SQL은 다음과 같습니다.
ORDER BY article_rating, article_time DESC
둘 중 하나만 정렬 할 수 있지만 둘 다 정렬 할 수는 없습니다.
답변
기본 정렬이 오름차순이므로 두 주문 모두에 키워드 DESC를 추가해야합니다.
ORDER BY article_rating DESC, article_time DESC
답변
ORDER BY article_rating, article_time DESC
평점이 동일한 기사가 두 개있는 경우에만 article_time을 기준으로 정렬합니다. 귀하의 예에서 볼 수있는 모든 것에서 이것이 정확히 일어난 것입니다.
↓ primary sort secondary sort ↓
1. 50 | This article rocks | Feb 4, 2009 3.
2. 35 | This article is pretty good | Feb 1, 2009 2.
3. 5 | This Article isn't so hot | Jan 25, 2009 1.
그러나 다음을 고려하십시오.
↓ primary sort secondary sort ↓
1. 50 | This article rocks | Feb 2, 2009 3.
1. 50 | This article rocks, too | Feb 4, 2009 4.
2. 35 | This article is pretty good | Feb 1, 2009 2.
3. 5 | This Article isn't so hot | Jan 25, 2009 1.
답변
ORDER BY article_rating ASC , article_time DESC
DESC
마지막에는 두 열을 내림차순으로 정렬합니다. ASC
그렇지 않으면 원하는지 지정 해야합니다.
답변
이것은 테이블을 두 개의 열로 정렬하는 방법을 찾고 있지만 병렬로 찾는 사람에게 도움이 될 수 있습니다. 이는 집계 정렬 기능을 사용하여 두 가지 정렬을 결합하는 것을 의미합니다. 예를 들어 전체 텍스트 검색을 사용하여 기사를 검색하거나 기사 게시 날짜와 관련하여 매우 유용합니다.
이것은 단지 예일 뿐이지 만, 아이디어를 잡으면 사용할 많은 집계 함수를 찾을 수 있습니다. 열에 가중치를 부여하여 초 당 하나를 선호 할 수도 있습니다. 내 기능은 두 가지 유형에서 모두 극단을 차지하므로 가장 가치있는 행이 맨 위에 있습니다.
이 작업을 수행 할 수있는 더 간단한 솔루션이 있지만 죄송합니다.
SELECT
`id`,
`text`,
`date`
FROM
(
SELECT
k.`id`,
k.`text`,
k.`date`,
k.`match_order_id`,
@row := @row + 1 as `date_order_id`
FROM
(
SELECT
t.`id`,
t.`text`,
t.`date`,
@row := @row + 1 as `match_order_id`
FROM
(
SELECT
`art_id` AS `id`,
`text` AS `text`,
`date` AS `date`,
MATCH (`text`) AGAINST (:string) AS `match`
FROM int_art_fulltext
WHERE MATCH (`text`) AGAINST (:string IN BOOLEAN MODE)
LIMIT 0,101
) t,
(
SELECT @row := 0
) r
ORDER BY `match` DESC
) k,
(
SELECT @row := 0
) l
ORDER BY k.`date` DESC
) s
ORDER BY (1/`match_order_id`+1/`date_order_id`) DESC
답변
다음은 두 열에 따라 내림차순으로 데이터를 정렬합니다.
ORDER BY article_rating DESC, article_time DESC