|
|
|
| Здравствуйте. Имеем три таблицы: фрукты, страны (в которых они растут), и таблица их соотношения (так как один фрукт может принадлежать более чем одной стране). Пример (на картинке):
http://s4.hostingkartinok.com/uploads/images/2012/12/78028d9a786cfd3dd5a07891a5854808.jpg
Задача: вывести список фруктов, и рядом с каждым фруктом список его стран. Думал как сделать, ничего не придумал кроме выборки сначала фруктов и вывода их в цикле, потом второй запрос для выбора стран внутри каждого цикла по id фрукта. Но это не есть гуд, как вы понимаете. Как новичок прошу совета (прикидывал и с временными таблицами, и с вложенными select, и с join'ами, но ничего не получилось). Спасибо. | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: Igorek
(09.12.2012 в 14:13)
| | Спасибо! Пытался делать левым join'ом, но про group by не знал, поэтому выводились дублирующие записи. Теперь все гуд. | |
|
|
|
|
|
|
|
для: Igorek
(09.12.2012 в 14:13)
| | Не знал функцию GROUP_CONCAT() ! | |
|
|
|
|
|
|
|
для: Sfinks
(10.12.2012 в 09:19)
| | *шок* | |
|
|
|