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
Есть код:
$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);
Есть код:
$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);
случайную запись 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);
случайную запись 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);

Стр.: 1, 2