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

Форум MySQL

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

 

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

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

тема: Помогите составить выборку из трех таблиц
 
 автор: Myrow   (09.12.2012 в 12:52)   письмо автору
 
 

Здравствуйте. Имеем три таблицы: фрукты, страны (в которых они растут), и таблица их соотношения (так как один фрукт может принадлежать более чем одной стране). Пример (на картинке):
http://s4.hostingkartinok.com/uploads/images/2012/12/78028d9a786cfd3dd5a07891a5854808.jpg
Задача: вывести список фруктов, и рядом с каждым фруктом список его стран. Думал как сделать, ничего не придумал кроме выборки сначала фруктов и вывода их в цикле, потом второй запрос для выбора стран внутри каждого цикла по id фрукта. Но это не есть гуд, как вы понимаете. Как новичок прошу совета (прикидывал и с временными таблицами, и с вложенными select, и с join'ами, но ничего не получилось). Спасибо.

  Ответить  
 
 автор: Igorek   (09.12.2012 в 14:13)   письмо автору
 
   для: Myrow   (09.12.2012 в 12:52)
 

список вида фрукт | страна:
SELECT f.title AS fruit, c.title AS country
FROM fruits f
LEFT JOIN relation r ON r.fruit_id = f.id
LEFT JOIN countries c ON c.id = r.country_id;


список вида фрукт | страны через запятую:
SELECT f.title AS fruit, GROUP_CONCAT(c.title) AS countries
FROM fruits f
LEFT JOIN relation r ON r.fruit_id = f.id
LEFT JOIN countries c ON c.id = r.country_id
GROUP BY f.id


пример здесь: http://sqlfiddle.com/#!2/fc013/38

  Ответить  
 
 автор: Myrow   (09.12.2012 в 16:10)   письмо автору
 
   для: Igorek   (09.12.2012 в 14:13)
 

Спасибо! Пытался делать левым join'ом, но про group by не знал, поэтому выводились дублирующие записи. Теперь все гуд.

  Ответить  
 
 автор: Sfinks   (10.12.2012 в 09:19)   письмо автору
 
   для: Igorek   (09.12.2012 в 14:13)
 

Не знал функцию GROUP_CONCAT() !

  Ответить  
 
 автор: Valick   (10.12.2012 в 15:25)   письмо автору
 
   для: Sfinks   (10.12.2012 в 09:19)
 

*шок*

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

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