뷰 제한으로 정렬한 다음 다른 열로 정렬
뷰별로 정렬하고 4로 제한하는 쿼리가 데이터베이스에서 *를 데이터베이스에서 선택합니다.
SELECT * FROM articles WHERE visible = 1 ORDER BY views LIMIT 4;
그러나 같은 쿼리에서 updated_at 열별로 정렬된 다른 모든 행을 찾습니다.
이런 시도도 해봤지만 잘 되지 않는다.
(SELECT * FROM articles ORDER BY views DESC LIMIT 4)
UNION
(SELECT * FROM articles ORDER BY updated_at DESC);
제안서는 홈페이지에서 가장 인기 있는 기사 4개를 "고정"하여 시간별로 주문하는 것입니다.
행을 반복하지 않고 동일한 쿼리에서 여러 방법으로 주문하는 방법이 있습니까?
이거 어떻게 해?
현재 당신의 생각으로, 우리는 두 개의 서브쿼리를 결합할 수 있습니다.첫 번째 서브쿼리는 이미 질문에 포함시킨 내용이며 자주 보는 4개의 문서를 찾습니다.두 번째 서브쿼리는 다른 모든 것을 찾습니다.여기서의 요령은 각 서브쿼리에 계산필드를 포함시키는 것입니다.이 필드를 사용하여 상위 4개의 레코드를 추적할 수 있습니다.그런 다음 먼저 이 계산 필드를 기준으로 정렬하고, 그 다음에 다음 순서로 정렬합니다.updated_at
들판.
(
SELECT a.*, 1 AS label
FROM articles a
WHERE visible = 1
ORDER BY views DESC
LIMIT 4
)
UNION ALL
(
SELECT a.*, 2
FROM articles a
WHERE visible = 1
ORDER BY views DESC
LIMIT 1000000 OFFSET 4 -- the limit 1000000 is arbitrary; just use a number
) -- larger than the expected size of your table
ORDER BY
label, views, updated_at
MySQL 문서:
...UNION의 기본 동작은 중복된 행이 결과에서 삭제되는 것입니다.
그리고.
... SELECT에 RIMIT 없이 ORDER BY가 표시되면 효과가 없기 때문에 ORDER BY는 최적화되어 있습니다. ...
그래서 여기서 비결은limit
두 번째 쿼리에서 다음을 수행합니다(제한을 선택하는 것은 사용자에게 달려 있습니다.
(SELECT * FROM articles WHERE visible = 1 ORDER BY views DESC LIMIT 4)
UNION
(SELECT * FROM articles WHERE visible = 1 ORDER BY updated_at DESC LIMIT 100);
쿼리는 MySQL 5.6 및 5.7에서 테스트되었습니다.
콤마를 사용하여 여러 개를 구분할 수 있습니다.ORDER
명령어를 지정합니다.MySQL은 왼쪽에서 오른쪽으로 오더합니다.
SELECT * FROM articles WHERE visible = 1 ORDER BY views, updated_at DESC LIMIT 4;
언급URL : https://stackoverflow.com/questions/46893737/order-by-views-limiting-then-order-by-another-column
'programing' 카테고리의 다른 글
리플렉션을 통해 Java 클래스의 퍼블릭 스태틱 최종 필드/속성 값을 가져옵니다. (0) | 2022.10.12 |
---|---|
사용자 지정 정렬 순서를 사용하여 개체의 ArrayList 정렬 (0) | 2022.10.12 |
java.displaces를 클릭합니다.Illogal Access Error: 클래스 lombok.javac.apt를 클릭합니다.Lombok Processor는 com.sun.tools.javac.processing 클래스에 액세스할 수 없습니다.Javac Processing Environment(Javac 처리 환경) (0) | 2022.10.12 |
Windows에서 가장 빠른 화면 캡처 방법 (0) | 2022.10.12 |
PHP 변수를 다음 페이지로 전달 (0) | 2022.10.12 |