|
|
Знаете ли Вы, что ... | |
...до того как открыть новую тему, стоит использовать поиск: такая тема уже может существовать. | |
<< Предыдущий совет - Случайный совет - Следующий совет >> |
Разное/IT Всё, что не попадает в другие разделы форума и подфорумов представленных здесь организаций. Не IT темы обсуждаются в "Беседке" |
Ответить |
|
Опции темы | Опции просмотра |
13.10.2013 15:50 | #1 | ||
AKA:Jazz
Сообщений: 4,528
+ 1,247
2,402/1,186
– 5
244/97
|
Ставим задачи - находим эффектные решения.
(В базе MySQL) 1. Виртуальный колхоз "Кизил пиёз. Пять бригад каждый день сдают на склад пиёз в кг. Текущий отчёт: За день. За неделю. За месяц. За квартал. За год. ps. Без флейма плиз. Красивые решения плюсуем. |
||
|
Ответить |
13.10.2013 16:26 | #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()), но неэстетично. |
|
Ответить |
13.10.2013 16:54 | #3 |
`id` in уже не ?
__________________
http://hit-season.net/ - сериалы On-Line! |
|
|
Ответить |
"+" от:
|
13.10.2013 16:57 | #4 |
Я как-то работал с записями больше чем 1М, там я реализовал "сложную (с relations)" выборку через временные таблицы. Работает не то что быстро, а моментально.
__________________
http://hit-season.net/ - сериалы On-Line! |
|
|
Ответить |
13.10.2013 17:20 | #6 |
Нет, Руслан. Это к вашей задачи решение. Спокойно можно использовать ORDER BY RAND() + дополнительные маневры в виде where, group, join
__________________
http://hit-season.net/ - сериалы On-Line! |
|
|
Ответить |
13.10.2013 19:08 | #8 |
AKA:Jazz
Сообщений: 4,528
+ 1,247
2,402/1,186
– 5
244/97
|
Зачем узнавать max если дано 1М записей?
Какое практическое значение у order by rand()? Сортировка по случайному значению? Ну в общем читабельно тут http://hudson.su/2010/09/16/mysql-optimizaciya-order-by-rand/ Последний раз редактировалось Alisher Umarov; 13.10.2013 в 19:30. |
|
Ответить |
13.10.2013 19:15 | #10 |
Примерно так можно работать с большим объемом данных, где нужно делать выборки:
create temporary table`temp` select * `db` .... , дальше уже обращаться ко временной таблице select .. from `temp`
__________________
http://hit-season.net/ - сериалы On-Line! |
|
|
Ответить |
|