본문 바로가기
MySql

MySQL로 임의의 행 선택

by 베이스 공부 2020. 10. 4.
반응형

나는이 주제에 대한 많은 주제를 보았고 그것을하는 방법을 이해하는데 실패했습니다.

예를 들어,이 테이블이있는 경우 :

+------+-------+-------+
| id   | name  | class |
+------+-------+-------+
|    5 | test  | one   | 
|   10 | test2 | one   | 
|   12 | test5 | one   | 
|    7 | test6 | two   | 
+------+-------+-------+

클래스 "one"에서 X 개의 임의의 행만 표시하고 싶습니다. 어떻게해야합니까?

참고 : 큰 테이블이므로 ORDER BY RAND 를 사용하고 싶지 않습니다.

 

해결 방법

 

대부분의 사람들이 권장하는 ORDER BY RAND () 솔루션은 이미 알고 있듯이 큰 테이블로 확장되지 않습니다.

SET @r := (SELECT FLOOR(RAND() * (SELECT COUNT(*) FROM mytable)));
SET @sql := CONCAT('SELECT * FROM mytable LIMIT 1 OFFSET ', @r);
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;


PHP로이 작업을 수행하려면 다음과 같이 할 수 있습니다 (테스트되지 않음).

<?php
$mysqli->begin_transaction();
$result = $mysqli->query("SELECT COUNT(*) FROM mytable")
$row = $result->fetch_row(); 
$count = $row[0]; 
$offset = mt_rand(0, $count);
$result = $mysqli->query("SELECT * FROM mytable LIMIT 1 OFFSET $offset");
...
$mysqli->commit();

 

참조 페이지 https://stackoverflow.com/questions/6541644

 

 

반응형

댓글