|
|
Знаете ли Вы, что ... | |
![]() |
...для каждой темы существует свой раздел. Изучите структуру форума. Если соответствующего раздела нет, то всегда есть раздел "Разное" :) |
<< Предыдущий совет - Случайный совет - Следующий совет >> |
Разное/IT Всё, что не попадает в другие разделы форума и подфорумов представленных здесь организаций. Не IT темы обсуждаются в "Беседке" |
Ответить |
|
Опции темы | Опции просмотра |
|
![]() |
#1 | ||
AKA:Jazz
Сообщений: 4,528
+ 1,247
2,402/1,186
– 5
244/97
![]() |
Ставим задачи - находим эффектные решения.
(В базе MySQL) 1. Виртуальный колхоз "Кизил пиёз. Пять бригад каждый день сдают на склад пиёз в кг. Текущий отчёт: За день. За неделю. За месяц. За квартал. За год. ps. Без флейма плиз. Красивые решения плюсуем. |
||
|
Ответить |
![]() |
#2 |
Заблокирован(а)
Сообщений: 18,519
+ 10,956
12,586/6,453
– 307
539/385
![]() |
2. Дано 1М записей;
Не самый производительный сервер; Нужно: ORDER BY RAND() LIMIT 10; В качестве временного решения работает: Первый запрос: узнаем количество записей в базе ($min, $max) В PHP генерим 10 "случайных" индексов: $id[$i] = rand($min, $max); Второй запрос: UNION (SELECT * FROM `a` WHERE `id` = $id[0] LIMIT 1) UNION (SELECT * FROM `a` WHERE `id` = $id[1] LIMIT 1)… и так далее. Проверяем результат, если записи по одному из ID не было (в ID бывают "дырки"), и получили меньше чем 10, добираем нужное количество запросов. Такая штуковина работает быстро (в сотни, и даже тысячи раз быстрее родного BY RAND()), но неэстетично. ![]() |
|
Ответить |
![]() |
#3 | |
![]() ![]() Служу Его Божественной Тени!
Сообщений: 1,671
+ 4,505
1,372/657
– 164
33/27
![]() |
Цитата:
Да, и если выбирать нужно часто, а меняется таблица редко, то есть смысл сразу ID-шники в массив выгрузить, и потом уже по нему рандомом выбирать...
__________________
Are you my mommy? Последний раз редактировалось DarkUser; 14.10.2013 в 12:42. |
|
|
Ответить |
2 "+" от:
|
![]() |
#5 |
![]() ![]() Служу Его Божественной Тени!
Сообщений: 1,671
+ 4,505
1,372/657
– 164
33/27
![]() |
Если делать запрос вида Select * from table limit 1 offset N (где N - заранее сгенерированный случайный номер из [0 .. count - 1]), то - нет. А так, запрос без указания Order By обычно инвариантен и порядок строк соответствует порядку хранения данных в таблице.
__________________
Are you my mommy? |
|
Ответить |
![]() |
#6 | |
![]() ![]() ![]() програмщег
Сообщений: 4,971
+ 2,743
5,086/2,116
– 69
99/68
![]() |
Цитата:
PHP код:
PHP код:
__________________
Ошибки прошлого, мудрость будущего. (с)Д.Тернер. |
|
|
Ответить |
![]() |
#7 |
![]() |
`id` in уже не ?
__________________
http://hit-season.net/ - сериалы On-Line! |
|
Ответить |
"+" от:
|
Реклама и уведомления | |
![]() |
#8 |
![]() |
Я как-то работал с записями больше чем 1М, там я реализовал "сложную (с relations)" выборку через временные таблицы. Работает не то что быстро, а моментально.
__________________
http://hit-season.net/ - сериалы On-Line! |
|
Ответить |
![]() |
#10 |
![]() |
Нет, Руслан. Это к вашей задачи решение. Спокойно можно использовать ORDER BY RAND() + дополнительные маневры в виде where, group, join
__________________
http://hit-season.net/ - сериалы On-Line! |
|
Ответить |
|