Добрый день!
Вопрос такой - можно как-то одним запросом вытянуть лист объектов, в том числе для каждого объекта получить лист связанных с ним many-to-many объектов?
Мой обычный inner join возвращает дубли(как и следовало ожидать) а хотелось бы получить что-то такое(в нотации псевдоязыка):
[[id = 1, name = "имя1", lang = [[id = 1, name = "cpp"], [id = 2, name = "php"] ]], [id = 2, name = "имя2", lang = [[id = 3, name = "python"], [id = 2, name = "php"] ]]]
После весь массив данных передаю шаблону для визуализации.
Прочитал правила форума, постарался их не нарушить в своём первом посте. Спасибо за ответы.
CREATE TABLE IF NOT EXISTS `lang` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=6 ;
CREATE TABLE IF NOT EXISTS `programs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
CREATE TABLE IF NOT EXISTS `programs_lang` (
`id_lang` int(11) NOT NULL,
`id_programs` int(11) NOT NULL,
`priority` int(11) NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `programs` (`id`, `name`) VALUES
(1, 'парсер'),
(2, 'snippet_site');
INSERT INTO `lang` (`id`, `name`) VALUES
(1, 'python'),
(2, 'php'),
(3, 'cpp'),
(4, 'js'),
(5, 'jango');
INSERT INTO `programs_lang` (`id_lang`, `id_programs`, `priority`) VALUES
(1, 1, 1),
(2, 1, 2),
(3, 1, 3),
(4, 2, 1),
(5, 2, 2);
select programs.id, programs.name, lang.id, lang.name from programs
INNER JOIN programs_lang ON programs_lang.id_programs = programs.id
INNER JOIN lang ON programs_lang.id_lang = lang.id