Как выбрать одну случайную запись из таблицы MySQL

302
23 октября 2018, 12:10

Есть таблица (в ней может быть 1 запись, а может 999999999999):

table1:

id | name | text
 2 | qqqq | dfgga
 3 | wwww | aaerhea
 5 | wwww | ahndr
 7 | qqqq | ndmttm
 8 | qqqq | fmfmfzf
 9 | qqqq | gnntrm

Есть запрос:

$query = "SELECT * FROM table1 WHERE name='qqqq' LIMIT 1";

Нужно выбрать одну рандомную запись из таблицы.

ORDER BY RAND() работает медленно, LIMIT со смещением не подойдёт (тоже работает медленно при большом смещении)

Может быть у кого нибудь есть готовые решения? В моём распоряжении PHP 7.0, MySQL 5.6

Answer 1

Как вариант можно взять максимальное id (MAX()) и минимальное id (MIN()), после на PHP сгенерировать между ними случайное число и проверять - есть ли запись с таким id. Если записи нет, то инкрементить или декрементить id (в зависимости от желания и проверять чтоб не больше max и не меньше min). Рано или поздно наткнешься на случайную запись. Может сразу, если повезет, может через несколько попыток. Костыль конечно. Но как вариант имеет право на жизнь.

Если поле числовое, то можно использовать не прямое совпадение, а оператор > или <.

READ ALSO
Выборка записей до ключевой при ее существовании или полная выборка без нее

Выборка записей до ключевой при ее существовании или полная выборка без нее

Как выбрать записи до ключевой при ее существовании а если ее нет сделать полную выборку

169
Можно ли в MySQL установить права на прцедуры

Можно ли в MySQL установить права на прцедуры

Можно ли в MySQL установить права для пользователя таким образом, что бы он не мог выполнять запросы на insert, update, delete, но мог вызывать хранимые...

169
zabbix 3.4 проблема с mysql

zabbix 3.4 проблема с mysql

Случилась проблема с zabbix 34 после перезагрузки не стартует mysql ругается на память

266
SQL умножение на курс валюты

SQL умножение на курс валюты

Есть две таблицы

263