Loading...
PHP/MySQL | Работа кодеру (php)
В общем суть задания нужно выбрать случайную запись 1 из таблицы users:

Есть код:
$r = $db->query("SELECT f.`id`,`hp`,`hpall`,`login`,`prava`,`class`,`str`,`def`,`sex`,`lvl`,`effects_4_time`,`effects_5_time`,`effects_6_time` FROM `users` f JOIN ( SELECT rand() * (SELECT max(id) from `users` WHERE `lvl` = '".$user['pvp_lvl']."' and `id`!='".$user['id']."' and `prava`!='admin' and `prava`!='bot') AS max_id ) AS m WHERE `lvl` = '".$user['pvp_lvl']."' and `id`!='".$user['id']."' and `prava`!='admin' and `prava`!='bot' and f.id >= m.max_id ORDER BY f.id ASC LIMIT 1");
if($r -> num_rows > '0'){
while($account = $r->fetch_assoc())
{

Если в базе 5000 записей еще норм справляется, но если кинуть например 100,000 сервер мускул очень напряжно справляется с такой задачей, ломаю голову уже 2 суток. Готов заплатить за выполненную работу по снижению нагрузки и производительности обработки при больших кол-вах данных скажем так до 100,000 записей если норм будет справляться будет достаточно.
________
посл. ред. 17.12.2017 в 13:34; всего 1 раз(а); by Drages
Код может быть другой но суть понятна что бы избежать нагрузки на сервер mysql, вариант выше спасет но не надолго так сказать
Drages , создай пустой массив. Выборка ид из бд, в цикле , в твой пустой массив записывай иды, а потом array_rand($array, 1);
Вуаля
Ваша услуга/цена
случайную запись 1 из таблицы users:

Есть код:
$r = $db->query("SELECT * FROM `users` WHERE `lvl` = '".$user['pvp_lvl']."' and `id`!='".$user['id']."' and `prava`!='admin' and `prava`!='bot' and `lvl` = '".$user['pvp_lvl']."' and `id`!='".$user['id']."' and `prava`!='admin' and `prava`!='bot' ORDER BY rand() LIMIT 1")->fetch(PDO::FETCH_LAZY);
rekmixa (17.12.2017 в 13:51)
случайную запись 1 из таблицы users:

Есть код:
$r = $db->query("SELECT * FROM `users` WHERE `lvl` = '".$user['pvp_lvl']."' and `id`!='".$user['id']."' and `prava`!='admin' and `prava`!='bot' and `lvl` = '".$user['pvp_lvl']."' and `id`!='".$user['id']."' and `prava`!='admin' and `prava`!='bot' ORDER BY rand() LIMIT 1")->fetch(PDO::FETCH_LAZY);


у меня mysqli, а теперь закинь в таблицу users 100,000 записей и приколись что будет=)
________
посл. ред. 17.12.2017 в 13:53; всего 1 раз(а); by Drages
А для чего цикл while, если выбирается 1 строка?
207965264 , можно и без него суть не изменится нагрузки
rekmixa (17.12.2017 в 13:51)
случайную запись 1 из таблицы users:

Есть код:
$r = $db->query("SELECT * FROM `users` WHERE `lvl` = '".$user['pvp_lvl']."' and `id`!='".$user['id']."' and `prava`!='admin' and `prava`!='bot' and `lvl` = '".$user['pvp_lvl']."' and `id`!='".$user['id']."' and `prava`!='admin' and `prava`!='bot' ORDER BY rand() LIMIT 1")->fetch(PDO::FETCH_LAZY);

*facepalm*
Cron и random по 10к записей
Онлайн: 2
Время:
Gen. 0.1089
(c) Bym.Guru 2010-2026