Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Выборка из двух таблиц. Вопрос по оптимизации
SELECT r.id_apartment,a.number,a.FIO,a.city FROM`request` r LEFTJOIN`v_apartment` a ON r.id_apartment = a.id ORDERBY a.city
И соответственно уже в скрипте во время вывода смотрю на изменение города и там применяю соответствующий стиль для строки, если город на предыдущем шаге был такой же то вывожу просто строку с инфой о заказе, а если город новый то сначала вывожу его название а потом строку с инфой.
Можно ли как-то сгруппировать выборку по городам и избавиться от лишних телодвижений в цикле или же оптимизировать данный запрос?
mik_name
Отправлено: 15 Ноября, 2011 - 23:25:44
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Нояб. 2011
Помог: 1 раз(а)
Первым запросом через distinct получаешь названия городов из таблицы абонентов, потом в цикле делаешь свой вышеприведенный запрос для каждого города с условием where a.city= $city делая какую угодно шапку и оформление вывода.
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
mik_name, худший вариант, к чему этот шквал запросов?
puta пишет:
И соответственно уже в скрипте во время вывода смотрю на изменение города и там применяю соответствующий стиль для строки, если город на предыдущем шаге был такой же то вывожу просто строку с инфой о заказе, а если город новый то сначала вывожу его название а потом строку с инфой.
Именно так эта задача и решается.
Можно так же результат выборки складывать в массив[ город ][ заказы ] и потом выводить парой вложенных foreach.
Кстати, для чего объединение по left join? Города может не быть?
----- PostgreSQL DBA
puta
Отправлено: 16 Ноября, 2011 - 08:01:04
Новичок
Покинул форум
Сообщений всего: 56
Дата рег-ции: Март 2010
Помог: 0 раз(а)
[quote=Мелкий][/quote]
да, могут попадаться и такие случаи
Самогонщик
Отправлено: 16 Ноября, 2011 - 08:06:01
Посетитель
Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011
Помог: 8 раз(а)
Хм, а города без заказов?
puta
Отправлено: 16 Ноября, 2011 - 08:06:28
Новичок
Покинул форум
Сообщений всего: 56
Дата рег-ции: Март 2010
Помог: 0 раз(а)
[quote=Самогонщик][/quote]
да, конечно )
Самогонщик
Отправлено: 16 Ноября, 2011 - 08:35:47
Посетитель
Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011
Помог: 8 раз(а)
http://www.javenue.info/post/20 пишет:
Full outer join (ключевое слово outer можно опустить) необходим для отображения всех возможных комбинаций строк из нескольких таблиц. �?ными словами, это объединение результатов left и right join.
Зависит от задачи, но если нужно выводить и города без заказов, может пригодиться.
Stierus
Отправлено: 16 Ноября, 2011 - 21:53:56
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
так оно и делается, только на столбец id_apartment ключ повесь что бы join по ключу был. Ну и LEFT JOIN заменить на INNER JOIN что бы заказы на людей, по тем или иным причинам пропавшим из базы, не выводились.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.