![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| patap |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
первый раз столкнулся с такой ситуацией. Стоит использовать такой запрос или лучше получить эти данные несколькими селектами?
пугает возвращаемое кол-во строк примерно 1500. Ну обработать я этот массив смогу, просто хочеться знать как правильно будет
Это сообщение отредактировал(а) patap - 2.7.2010, 16:49 -------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
1500 вариантов? А что с ними делается потом?
просто выводить на страничку весь список? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| patap |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
т.к. там LEFT JOIN, то получается по некоторым столбцам дублирование
в результате, если обработать эти данные, получится массив
вот к примеру фрагмент выборки, чтобы было ясно какое дублирование я имею ввиду [profile_surname] [profile_name] [language_type] [language_level] [education_type] Ivanov Ivan eng 6 height Ivanov Ivan eng 6 other Ivanov Ivan eng 6 xxxxx Ivanov Ivan ukr 9 height Ivanov Ivan ukr 9 other Ivanov Ivan ukr 9 xxxxx если обработать эту выборку, то получим массив:
и далее из этого массива получается компактный вывод инфы на страницу. Это сообщение отредактировал(а) patap - 2.7.2010, 17:18 -------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
||||
|
|||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
Для такого вывода было бы эффективней несколько запросов. Бз join'ов и с WHERE. imho, объем данных будет меньше, возится с разбором придется меньше. Правда насколько все это добро станет эффективней - надо профилировать...
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| patap |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
ksnk, проект мизерный, никаких больших нагрузок точно не будет. Я сейчас наверно сделаю по каждой таблице селектом, при данных условиях это большой роли не сыграет, и действительно - не буду возиться с обработкой.
Просто хотелось бы уяснить на будущее, мало ли где еще встанет такая ситуация - что лучше один запрос или к примеру 8? -------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
/*ирония: вкл*/ если каждый из восьми запросов возвращает по 10 записей, никак не связанных друг с другом, то итоговое декартово произведение в 10^8(сто миллионов записей) против 80 при использовании 8 отдельных запросов будет большим выигрышем, да. /*ирония: выкл*/ с другой стороны, если из этих 8 таблиц только из первой выбирается 10 записей, а из остальных присоединенных таблиц - максимум по одной на каждую запись из первой таблицы, то в итоге получается те же 80 записей. но их удобней обработать, раз пришло одним запросом. а по твоему запросу, где в условии связывания(ON ... ) указаны только имена полей без указания таблиц не позволяет даже предположить - к какому случаю относится твой абстрактный вопрос так что лучше я отвечу коротко: ДА! Добавлено @ 22:27 касательно оптимизации запросов рекомендую Дэна Тоу "Настройка SQL. Генерация оптимальных планов исполнения" как на меня - отличная книга и с "толстыми", и с тонкими нюансами оптимизации(правда, понял из книги не все, чем похвастаться не могу :( ) |
|||
|
||||
| patap |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
skyboy, ksnk, спасибо за ответы. Информацию проработаю. Думаю, эта тема дала мне толчок в более глубокое изучение SQL))
-------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
|||
|
||||
| Noviy |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 29.11.2007 Репутация: нет Всего: нет |
Меня смущает в этом запросе одно, не выберается информация с таблиц, который джойнятся. Думаю, можно бы было обойтись и без join.
p.s Лучше воспользоваться inner join, ибо нет проверки на null. |
|||
|
||||
| patap |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
я так понимаю, что явно указывать таблицы нужно если в разных таблицах есть поля с одинаковыми именами, в моем случае таких не имеется, по-этому опустил этот факт.
для проврки все-таки указал табицы явно - результат тот же.
-------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
дадада. и в перечислении полей и в условиях не указывай имя таблицы, если имя поля уникально. это: 1. усложнит любую попытку понять, в чем заключается запрос(и тебе тоже - через полгода максимум) 2. приведет к необходимости переписывать все запросы, если внезапно у тебя в двух таблицах появятся одноименные поля |
|||
|
||||
| patap |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 3 Всего: 40 |
skyboy, я привык к названию поля подставлять название таблицы, как префикс, поэтому, могу предположить, что второй вариант для меня маловероятен. По первому - согласен, что автоматически устраняет пункт 2 ))
хотя по пункту 1 - следуя моей логике называния полей, будет не так сложно понять, что к чему. в общем буду указывать таблицу явно -------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |