집 >데이터 베이스 >MySQL 튜토리얼 >MySQL 쿼리에서 데이터를 무작위로 선택하고 정렬하는 방법은 무엇입니까?
MySQL 쿼리에서 임의 순서와 오름차순 결합
상당한 수의 사용자가 있는 데이터베이스 시나리오에서는 다음과 같은 상황이 발생할 수 있습니다. 여기서는 하위 집합을 무작위로 선택하고 이름과 같은 특정 속성을 기준으로 추가로 정렬할 수 있습니다. 이는 간단한 작업처럼 보일 수 있지만 표준 SQL 쿼리가 항상 원하는 결과를 제공하는 것은 아닙니다.
고려할 수 있는 한 가지 접근 방식은 ORDER BY rand()를 사용하는 것입니다. 이는 임의의 결과를 검색하는 데 자주 사용됩니다. 데이터베이스. 그러나 이름 ASC와 같은 다른 ORDER BY 절과 결합하면 예상대로 작동하지 않을 수 있습니다. 예를 들어, 아래 쿼리는 원하는 결과를 얻지 못할 수 있습니다.
<code class="sql">SELECT * FROM users WHERE 1 ORDER BY rand(), name ASC LIMIT 20</code>
이 쿼리는 20명의 사용자를 무작위로 선택한 다음 이름 속성을 기준으로 오름차순으로 정렬하려고 시도합니다. 그러나 데이터베이스 관리 시스템(DBMS)은 쿼리를 왼쪽에서 오른쪽으로 처리한다는 점을 이해하는 것이 중요합니다. 따라서 이 경우에는 rand() 함수가 먼저 적용되어 전체 데이터 세트를 효과적으로 섞습니다. 이어서 ASC 절이라는 이름이 적용되지만 이미 데이터가 무작위화되어 있기 때문에 결과 순서에 의미 있는 영향을 미치지 않습니다.
하위 쿼리 솔루션
원하는 동작을 달성하기 위해 기본 쿼리 내에 하위 쿼리를 사용할 수 있습니다. 하위 쿼리는 데이터의 하위 집합을 격리하고 여기에 특정 논리를 적용하는 데 사용할 수 있는 중첩 쿼리입니다. 하위 쿼리를 활용하면 먼저 20명의 사용자를 무작위로 선택한 다음 하위 쿼리 내의 이름 속성을 기준으로 정렬할 수 있습니다.
다음은 하위 쿼리를 활용하는 수정된 쿼리의 예입니다.
<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명의 사용자를 선택하여 임시 테이블 T1에 저장합니다. 그런 다음 외부 쿼리는 T1의 모든 열을 선택하고 이름 속성을 기준으로 결과를 정렬합니다.
하위 쿼리를 사용하면 rand() 함수가 무작위로 정렬하려는 사용자 하위 집합에만 적용됩니다. 선택하다. 이 접근 방식을 사용하면 이미 무작위로 추출된 데이터에 후속 이름 순서가 적용되어 무작위로 선택된 20명의 사용자가 이름을 알파벳순으로 정렬하여 원하는 결과를 얻을 수 있습니다.
위 내용은 MySQL 쿼리에서 데이터를 무작위로 선택하고 정렬하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!