![]() |
|
Модераторы: skyboy |
![]()
|
|
| Sanchezzz |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: нет Всего: 60 |
Добрый день. Есть динамически составленный запрос который составляется через большую функцию впыхе которая на выходе выдает такое
Условий может быть сколько угодно (до60) они добавляются в запрос примерно так
Cлучайная выборка выполняется с помощью варварского метода ORDER BY RAND() хотелось бы переделать под элегантный быстрый вариант. Подскажите как лучше реализовать случайную выборку Это сообщение отредактировал(а) Sanchezzz - 17.8.2012, 06:59 -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
||||
|
|||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Нормальный метод Элегантных вариантов масса. Но быстрый - не получится. SQL_CALC_FOUND_ROWS - а, значит, выборка всех записей, и никакой LIMIT не поможет. Кстати, если inner join - нахрена вложенный селект? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Sanchezzz |
|
||||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: нет Всего: 60 |
SQL_CALC_FOUND_ROWS только считает статистику сколько всего возможно было выбрано если не использовался лимит с ткущим условием выборки это быстрее чем тоже самое с count(*) в отдельным запросе. (я планирую его убирать при рандомных выборках + с лимитом начало позиции оставляя только просто LIMIT N )
И если мне не изменяет память от прочитаного когда то давно то SQL_CALC_FOUND_ROWS в myIsam бреется из собственной хранения информации о таблице когда для InnoDB наоборот считается тем самым выполнения делается дольше но результат такой же.
Структура такая хранения данных о объекте в одной таблице ( Мусора ) выборка происходит по принцепу обращения к одной и тойже таблице много раз по условию которое строится по специальному объекту класса в пхп 1 критерия условия поиска по нужному полю
На выходе получаем часть фильтра который потом склеиваем с 2 и 3 куском фильтра в последовательности вызова.
2 критерия поиска по другому полю
на выходе получаем
Эти 2 части запросов складываются в той последовательности в какой они были вызваны на выходе получаем полный запрос
Если есть решения как это написать лучше я посмотрю и почитаю с удовольствием, но сразу скажу что SELF JOIN выборка не подходила под мои требования Это сообщение отредактировал(а) Sanchezzz - 17.8.2012, 10:33 -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
||||||||||||
|
|||||||||||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Чем
отличается от
? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| Sanchezzz |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: нет Всего: 60 |
Есть соображения пока только такие:
Обвернуть все в дополнительный SELECT b перенести rand() во временную таблицу с меньшим количеством данных
Добавлено через 10 минут и 59 секунд
Нечем оба одинаково работаю за исключением того что мы не создаем лишнею временную таблицу -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
||||||
|
|||||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Просил быстрее? используй. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |