|
|
|
| Вопрос возник в продолжение темы с объявлениями.
Есть несколько связанных таблиц - "пользователи", "города", "разделы" и "объявления".
Сделать запрос на извлечение из них данных не составило большого труда, но появилась необходимость добавить еще одну таблицу "фотографии" в которой хранятся пути к фотографиям и идентификаторы тех объявлений к которым они прикреплены. Связь - один ко многим. Причем фотографий может и не быть.
Можно ли реализовать запрос который бы возвращал данные для одного объявления из перечисленных выше таблиц и возвращал пути ко ВСЕМ фотографиям для этого объявления?
Или придется делать выборку фотографий для каждого объявления в отдельности? | |
|
|
|
|
|
|
|
для: durable
(29.05.2009 в 16:16)
| | через left join | |
|
|
|
|
|
|
|
для: 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
(29.05.2009 в 16:16)
| | Спасибо.
Проблема решилась с использованием GROUP_CONCAT ну и конечно LEFT JOIN. | |
|
|
|