Есть таблица (в ней может быть 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
Как вариант можно взять максимальное id
(MAX()
) и минимальное id
(MIN()
), после на PHP сгенерировать между ними случайное число и проверять - есть ли запись с таким id
. Если записи нет, то инкрементить или декрементить id
(в зависимости от желания и проверять чтоб не больше max
и не меньше min
). Рано или поздно наткнешься на случайную запись. Может сразу, если повезет, может через несколько попыток. Костыль конечно. Но как вариант имеет право на жизнь.
Если поле числовое, то можно использовать не прямое совпадение, а оператор >
или <
.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как выбрать записи до ключевой при ее существовании а если ее нет сделать полную выборку
Можно ли в MySQL установить права для пользователя таким образом, что бы он не мог выполнять запросы на insert, update, delete, но мог вызывать хранимые...
Случилась проблема с zabbix 34 после перезагрузки не стартует mysql ругается на память