Моё меню Общее меню Сообщество Правила форума Все прочитано
Вернуться   uForum.uz > ИКТ и телеком > Разное/IT
Сообщения за день Поиск
Знаете ли Вы, что ...
...нарушения правил форума наказываются. Старайтесь их не нарушать.
<< Предыдущий совет - Случайный совет - Следующий совет >>

Разное/IT Всё, что не попадает в другие разделы форума и подфорумов представленных здесь организаций. Не IT темы обсуждаются в "Беседке"


Ответить

 
Опции темы Опции просмотра
Старый 13.10.2013 15:50   #1  
Real ID Group Ultimate 2008
Аватар для Alisher Umarov
Оффлайн
AKA:Jazz
Сообщений: 4,528
+ 1,247  2,402/1,186
– 5  244/97

Uzbekistan
Развлекаемся с SQL

Ставим задачи - находим эффектные решения.
(В базе MySQL)

1. Виртуальный колхоз "Кизил пиёз. Пять бригад каждый день сдают на склад пиёз в кг.
Текущий отчёт:
За день. За неделю. За месяц. За квартал. За год.

ps. Без флейма плиз.
Красивые решения плюсуем.
Ответить 
Старый 13.10.2013 16:26   #2  
Заблокирован(а)
Аватар для JackDaniels
Оффлайн
Сообщений: 18,519
+ 10,956  12,586/6,453
– 307  539/385

Vatican City State
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  
Real ID Group
Аватар для Denis Shlyapnikov
Оффлайн
FreeLance
Python/PHP программист
Сообщений: 1,054
+ 886  435/275
– 35  6/6

Russian FederationОтправить сообщение для Denis Shlyapnikov с помощью Skype™Facebook
`id` in уже не ?
__________________
http://hit-season.net/ - сериалы On-Line!
Ответить 
"+" от:
Старый 13.10.2013 16:57   #4  
Real ID Group
Аватар для Denis Shlyapnikov
Оффлайн
FreeLance
Python/PHP программист
Сообщений: 1,054
+ 886  435/275
– 35  6/6

Russian FederationОтправить сообщение для Denis Shlyapnikov с помощью Skype™Facebook
Я как-то работал с записями больше чем 1М, там я реализовал "сложную (с relations)" выборку через временные таблицы. Работает не то что быстро, а моментально.
__________________
http://hit-season.net/ - сериалы On-Line!
Ответить 
Старый 13.10.2013 17:14   #5  
Заблокирован(а)
Аватар для JackDaniels
Оффлайн
Сообщений: 18,519
+ 10,956  12,586/6,453
– 307  539/385

Vatican City State
Цитата:
Сообщение от Denis Shlyapnikov Посмотреть сообщение
там я реализовал "сложную (с relations)" выборку через временные таблицы
Чем это поможет при сортировке?
Или это к вопросу №1 было?
Ответить 
Старый 13.10.2013 17:20   #6  
Real ID Group
Аватар для Denis Shlyapnikov
Оффлайн
FreeLance
Python/PHP программист
Сообщений: 1,054
+ 886  435/275
– 35  6/6

Russian FederationОтправить сообщение для Denis Shlyapnikov с помощью Skype™Facebook
Нет, Руслан. Это к вашей задачи решение. Спокойно можно использовать ORDER BY RAND() + дополнительные маневры в виде where, group, join
__________________
http://hit-season.net/ - сериалы On-Line!
Ответить 
Старый 13.10.2013 17:38   #7  
Заблокирован(а)
Аватар для JackDaniels
Оффлайн
Сообщений: 18,519
+ 10,956  12,586/6,453
– 307  539/385

Vatican City State
Цитата:
Сообщение от Denis Shlyapnikov Посмотреть сообщение
к вашей задачи решение. Спокойно можно использовать ORDER BY RAND() + дополнительные маневры в виде where, group, join
Так хотелось бы решение как раз и увидеть.
Здесь его нет, только слово «маневры».
Ответить 
Реклама и уведомления
Старый 13.10.2013 19:08   #8  
Real ID Group Ultimate 2008
Аватар для Alisher Umarov
Оффлайн
AKA:Jazz
Сообщений: 4,528
+ 1,247  2,402/1,186
– 5  244/97

Uzbekistan
Зачем узнавать 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:12   #9  
Заблокирован(а)
Аватар для JackDaniels
Оффлайн
Сообщений: 18,519
+ 10,956  12,586/6,453
– 307  539/385

Vatican City State
Цитата:
Сообщение от Alisher Umarov Посмотреть сообщение
Зачем узнавать max если дано 1М записей?
Это ведь приблизительно.
Элементы добавляются/удаляются.

Цитата:
Сообщение от Alisher Umarov Посмотреть сообщение
Какое практическое значение у order by rand()? Сортировка по случайному значению?
Порой нужно показать что-то в случайном порядке.
Ответить 
Старый 13.10.2013 19:15   #10  
Real ID Group
Аватар для Denis Shlyapnikov
Оффлайн
FreeLance
Python/PHP программист
Сообщений: 1,054
+ 886  435/275
– 35  6/6

Russian FederationОтправить сообщение для Denis Shlyapnikov с помощью Skype™Facebook
Примерно так можно работать с большим объемом данных, где нужно делать выборки:
create temporary table`temp` select * `db` .... , дальше уже обращаться ко временной таблице select .. from `temp`
__________________
http://hit-season.net/ - сериалы On-Line!
Ответить 
Ответить




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Advertisement System V2.5 By Branden
OOO «Единый интегратор UZINFOCOM»


Новые 24 часа Кто на форуме Новички Поиск Кабинет Все прочитано Вверх