Есть таблица (в ней может быть 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
). Рано или поздно наткнешься на случайную запись. Может сразу, если повезет, может через несколько попыток. Костыль конечно. Но как вариант имеет право на жизнь.
Если поле числовое, то можно использовать не прямое совпадение, а оператор >
или <
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как выбрать записи до ключевой при ее существовании а если ее нет сделать полную выборку
Можно ли в MySQL установить права для пользователя таким образом, что бы он не мог выполнять запросы на insert, update, delete, но мог вызывать хранимые...
Случилась проблема с zabbix 34 после перезагрузки не стартует mysql ругается на память