» WAP Мастер Форум https://forum.wapinet.ru/index.php » SQL https://forum.wapinet.ru/viewforum.php?id=8 » выбрать 10 случайных, уникальных записей https://forum.wapinet.ru/viewtopic.php?id=2436 |
koji » 2015.08.24 19:51 | ||||||||||||||||||||||||||||||||
Как можно провести такую выборку? Поиск выдает решение ORDER BY RAND() однако, говорят, что это сказывается на производительности. | ||||||||||||||||||||||||||||||||
Gemorroj » 2015.08.24 22:49 | ||||||||||||||||||||||||||||||||
сказывается. но если у тебя БД не 1.000.000 записей, то забей и используй order by rand. т.к. иные решения чересчур черезжопные. | ||||||||||||||||||||||||||||||||
koji » 2015.08.24 23:11 | ||||||||||||||||||||||||||||||||
Gemorroj, сделал набросок через multi_query и php, но мне бы получать как-то уникальный rand. Может имеется у тебя? | ||||||||||||||||||||||||||||||||
koji » 2015.08.25 08:11 | ||||||||||||||||||||||||||||||||
Не знаю как производить дополнительную генерацию rand внутри if (in_array($rand, $random)) до тех пор пока не выпадет уникальное число. Код:
| ||||||||||||||||||||||||||||||||
koji » 2015.08.25 08:36 | ||||||||||||||||||||||||||||||||
Какая вероятность что из 50 random чисел не окажется 10 уникальных? Этот вариант тоже подходит, но его нельзя масштабировать. Чем больше диапазон требуемых уникальных чисел тем больше потребуется генерировать случайных и медленнее будет работать. Код:
| ||||||||||||||||||||||||||||||||
Gemorroj » 2015.08.25 09:26 | ||||||||||||||||||||||||||||||||
я так и не понял чем не подошел order by rand | ||||||||||||||||||||||||||||||||
koji » 2015.08.25 09:39 | ||||||||||||||||||||||||||||||||
Gemorroj, совесть сожрет. Альтернатива в 2 минутах.. через multi_query | ||||||||||||||||||||||||||||||||
tipsun » 2015.08.25 11:25 | ||||||||||||||||||||||||||||||||
koji, а нельзя сделать типа: сгенерировать 1 случайное число и ограничить кол-во записей LIMIT 10. | ||||||||||||||||||||||||||||||||
koji » 2015.08.25 11:44 | ||||||||||||||||||||||||||||||||
tipsun, не совсем понял, что рекомендуешь на словах. Благодарю за хабра-ссылки, надо бы замерить скорость. | ||||||||||||||||||||||||||||||||
tipsun » 2015.08.25 11:48 | ||||||||||||||||||||||||||||||||
koji, ну сгенерировал 1 число (выбрал 1 случайное id/запись) и далее после него цепляешь еще, 9 за ним которые. | ||||||||||||||||||||||||||||||||
koji » 2015.08.25 12:24 | ||||||||||||||||||||||||||||||||
tipsun, а если окажется что в БД выбранное 51 это последняя запись? Хотя это неплохой вариант. Мне кажется в ссылках есть пример (из комментариев) вроде подходит, надо бы попробовать его. Но хочу доделать свой через мульти + php чтобы сравнить скорость. | ||||||||||||||||||||||||||||||||
tipsun » 2015.08.25 12:41 | ||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
koji » 2015.08.25 16:44 | ||||||||||||||||||||||||||||||||
tipsun, благодарю Код:
| ||||||||||||||||||||||||||||||||
tipsun » 2015.08.25 17:42 | ||||||||||||||||||||||||||||||||
koji, рандомно взятый кусок списка получается как бы. А мой код лучше не юзай, я там ошибся в нескольких местах, ну нафиг :) | ||||||||||||||||||||||||||||||||
koji » 2015.08.25 22:54 | ||||||||||||||||||||||||||||||||
tipsun, видимо на скорую руку набросал ;) я тоже сомневался Код:
вариант из двух: тот, что посоветовал ты и через multi_query. Последний срабатывает за 0.005. Там сгенерировать 10 запросов с выборкой WHERE id = $unique[$i] Надо бы запустить на базе побольше, тогда точно станет ясно. | ||||||||||||||||||||||||||||||||
tipsun » 2015.08.25 23:46 | ||||||||||||||||||||||||||||||||
Gemorroj, что "скажешь"? Мне кажется есть ещё более крутой и оптимизированный способ. Код:
| ||||||||||||||||||||||||||||||||
tipsun » 2015.08.26 00:00 | ||||||||||||||||||||||||||||||||
Если кол-во записей совпадает с кол-во выводимых постов, то можно вообще сделать через: shuffle(range(1, 10)); | ||||||||||||||||||||||||||||||||
Gemorroj » 2015.08.26 09:25 | ||||||||||||||||||||||||||||||||
tipsun ну у тебя подразумевается что дырок в очередности id в бд нету. а в реальности, записи могут отсутствовать. | ||||||||||||||||||||||||||||||||
koji » 2015.08.26 11:51 | ||||||||||||||||||||||||||||||||
Gemorroj, точно, да, об этом никто не думал. ID ведь могут отсутствовать. |