mysql의 select 문 "in" 절에서 값 순서에 따라 정렬
정수 ID 값이 있는 큰 테이블(수백만 행)에서 계정 레코드 세트를 선택하고 있습니다.어떤 의미에서는 질문에 대한 기본적인 것처럼 말이죠.큰 쉼표로 구분된 목록을 만들어서 쿼리에 "인"절로 전달하는 겁니다.현재 결과는 전혀 질서가 없습니다.제가 하고 싶은 일은 "in" 절의 값 순서대로 결과를 돌려받는 것입니다.
대신 임시 테이블을 만들고 대신 조인을 해야 한다고 생각합니다. 피하고 싶지만 그러지 못할 수도 있습니다.
생각은?현재 쿼리의 크기는 각각 약 60k로 제한되어 있습니다. 출력 크기를 제한하려고 하지만 임의로 클 수 있기 때문에 물리적인 쿼리는 아니더라도 실제적인 관점에서는 "인" 쿼리를 배제할 수 있습니다.
미리 감사드립니다.
사실은 이게 더 낫습니다.
SELECT * FROM your_table
WHERE id IN (5,2,6,8,12,1)
ORDER BY FIELD(id,5,2,6,8,12,1);
FIELD 설명서는 다음과 같습니다.
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_field
약간의 속임수..
SELECT * FROM your_table
WHERE id IN (5,2,6,8,12,1)
ORDER BY FIND_IN_SET(id,'5,2,6,8,12,1') DESC;
find_in_set의 ID 목록은 문자열이므로 따옴표로 묶습니다.또한 DESC가 없으면 결과가 목록에서 지정한 대로 REVERSE 순서로 반환됩니다.
쿼리가 60K이면 잘못된 방식으로 실행하고 있다는 신호입니다.
ORDER BY 절을 사용하는 것 외에 결과 집합을 주문할 수 있는 방법은 없습니다.IN 조항에 있는 모든 요소를 다시 나열하여 복잡한 CASE 조항을 주문에 넣을 수 있지만, 그러면 쿼리가 120K가 될 것입니다.
원치 않으시겠지만 IN 조항에 있는 값을 테이블이나 임시 테이블에 넣어서 가입하셔야 합니다.임시 테이블에 정렬 순서 열을 포함하고 순서대로 정렬할 수도 있습니다.조인과 같은 데이터베이스.이렇게 하면 쿼리가 잘 수행되는 데 도움이 됩니다.
이것이 제가 mysql 8.0에 대해 얻는 것입니다.위의 답변과는 반대인 것 같습니다.
지정한 목록과 같은 순서로 정렬합니다.
SELECT * FROM your_table
WHERE id IN (5,2,6,8,12,1)
ORDER BY FIND_IN_SET(id,'5,2,6,8,12,1');
지정된 목록에 따라 역순으로 정렬합니다.
SELECT * FROM your_table
WHERE id IN (5,2,6,8,12,1)
ORDER BY FIND_IN_SET(id,'5,2,6,8,12,1') DESC;
첫 번째 쿼리는 확실히 절별 순서를 사용합니다.그래서 그냥 조인을 하고, 조항별로 같은 주문을 쓰시면 됩니다.
예를 들어, 이것이 당신의 첫번째 쿼리였다면
SELECT customer_idFROM customer여기서 customer_id는 1과 100 사이입니다.주문성_이름으로
그리고 이번이 두번째 질문이었습니다.
재고_id를 선택FROM 렌탈WHERE customer_id in (...)순서 리스트...)
합하면 다음과 같습니다.
SELECT r.inventory_idFROM 렌탈러이너JOIN고객c온 r.customer_id = c.customer_id여기서 c.customer_id는 1과 100 사이입니다.주문c.last_name 기준
이게 제게 효과가 있었던 겁니다.
SELECT * FROM your_table
WHERE id IN ('5','2','6','8','12','1')
ORDER BY FIELD(id,'5','2','6','8','12','1');
인용문에 ID를 추가했습니다.
언급URL : https://stackoverflow.com/questions/2185029/sort-by-order-of-values-in-a-select-statement-in-clause-in-mysql
'programing' 카테고리의 다른 글
WP에서 TinyMCE에 여러 버튼을 추가하는 방법? (0) | 2023.10.12 |
---|---|
사용자 메타_key가 존재하는 경우 워드 프레스를 수행합니다. (0) | 2023.10.12 |
패키지에 절차가 있는지 확인하려면 어떻게 해야 합니까? (0) | 2023.10.12 |
전문 jQuery 기반 콤보박스 제어? (0) | 2023.10.12 |
구독 전환 - 카트에 직접 추가 (0) | 2023.10.12 |