반응형
나는이 주제에 대한 많은 주제를 보았고 그것을하는 방법을 이해하는데 실패했습니다.
예를 들어,이 테이블이있는 경우 :
+------+-------+-------+
| 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
반응형
'MySql' 카테고리의 다른 글
MySQL에서 SUM ()으로 업데이트 (0) | 2020.10.05 |
---|---|
MySQL PHP MySQLi num_rows 항상 0 반환 (0) | 2020.10.04 |
MySQL Java를 사용하여 MySQL 데이터베이스에서 탭으로 구분 된 파일을 가져 오는 방법은 무엇입니까? (0) | 2020.10.04 |
MySQL Java에서 프록시를 통한 MySQL Connect (0) | 2020.10.04 |
MySQL mySql은 키 값이 변경된 동일한 테이블에 행을 복사합니다 (기존을 덮어 쓰지 않음). (0) | 2020.10.04 |
댓글