MySQL 데이터베이스로 작업할 때 특정 순서를 보장하면서 데이터의 하위 집합을 검색해야 하는 경우가 많습니다. 일반적인 시나리오 중 하나는 사용자와 같은 레코드의 무작위 샘플을 선택한 다음 이름과 같은 특정 속성을 기반으로 결과를 추가로 구성하는 것입니다.
이는 다음 쿼리를 활용하는 것입니다.
<code class="sql">SELECT * FROM users WHERE 1 ORDER BY rand(), name ASC LIMIT 20</code>
그러나 rand() 함수가 전체 데이터 세트를 무작위로 정렬하고 후속 이름 ASC 순서가 보장되지 않으므로 이 쿼리는 예상한 결과를 제공하지 못할 수 있습니다.
이름 기반 정렬을 보장하면서 무작위화를 효과적으로 달성하려면 하위 쿼리 접근 방식이 권장됩니다.
<code class="sql">SELECT * FROM ( SELECT * FROM users ORDER BY rand() LIMIT 20 ) T1 ORDER BY name </code>
이 쿼리에서 가장 안쪽 하위 쿼리( SELECT * FROM users ORDER BY rand() LIMIT 20)은 20명의 사용자로 구성된 무작위 샘플을 선택합니다. LIMIT 20 절은 20개의 행만 반환되도록 보장합니다.
그런 다음 외부 쿼리는 T1으로 표시되는 하위 쿼리의 결과를 입력으로 사용합니다. ORDER BY 이름 절을 적용하여 하위 쿼리 결과를 이름별로 오름차순으로 구성합니다. 이는 초기 선택의 무작위성과 원하는 이름 기반 정렬을 효과적으로 결합합니다.
이 하위 쿼리 접근 방식을 사용하면 사용자의 무작위 샘플을 검색하고 의도한 대로 이름을 기준으로 알파벳순으로 정렬할 수 있습니다.
위 내용은 MySQL에서 무작위 선택과 이름 기반 정렬을 결합하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!