Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как реализовать запрос в несколько таблиц?
 
 автор: durable   (29.05.2009 в 16:16)   письмо автору
 
 

Вопрос возник в продолжение темы с объявлениями.
Есть несколько связанных таблиц - "пользователи", "города", "разделы" и "объявления".
Сделать запрос на извлечение из них данных не составило большого труда, но появилась необходимость добавить еще одну таблицу "фотографии" в которой хранятся пути к фотографиям и идентификаторы тех объявлений к которым они прикреплены. Связь - один ко многим. Причем фотографий может и не быть.

Можно ли реализовать запрос который бы возвращал данные для одного объявления из перечисленных выше таблиц и возвращал пути ко ВСЕМ фотографиям для этого объявления?
Или придется делать выборку фотографий для каждого объявления в отдельности?

  Ответить  
 
 автор: Loki   (29.05.2009 в 16:29)   письмо автору
 
   для: durable   (29.05.2009 в 16:16)
 

через left join

  Ответить  
 
 автор: durable   (30.05.2009 в 15:34)   письмо автору
 
   для: Loki   (29.05.2009 в 16:29)
 

Пробовал с left join в результате получается, что если одному объявлению сопоставлена одна фотография, то все нормально - возвращается одна строка, которая потом легко обрабатывается в php.

А как быть если одному объявлению сопостевлено, например, 3 фотографии?
Тогда возвращается 3 строки?!

  Ответить  
 
 автор: 123123   (30.05.2009 в 17:39)
 
   для: durable   (30.05.2009 в 15:34)
 

Можно как-то так

select ..., GROUP_CONCAT(p.filename SEPARATOR ':') as photo_list FrOm advs a leFT joIN photos p oN advs.id = p.adv_id GrOuP bY advs.id ...

Но там ограничение на содержимое GROUP_CONCAT есть. по умолчанию вроде 1 Kb. Соотвественно, это вариант для тех случаев, когда точно известно, что все имена фоток влезут в 1 Kb. Значит неидеальный.

  Ответить  
 
 автор: 123123   (30.05.2009 в 17:40)
 
   для: 123123   (30.05.2009 в 17:39)
 

... ну а на пхп уже explode'ом разбить строку по разделителю ":". В имени файла его быть не может, так что туттт проблем нету!

  Ответить  
 
 автор: durable   (30.05.2009 в 19:07)   письмо автору
 
   для: durable   (29.05.2009 в 16:16)
 

Спасибо.
Проблема решилась с использованием GROUP_CONCAT ну и конечно LEFT JOIN.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования