Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera. Estava estudando um pouco sobre os JOINs (INNER JOIN, LEFT JOIN, RIGHT JOIN, etc) e cai num pequeno problema. Acho que há uma solução fácil. Estrutura:
> CREATE TABLE `aluno` ( `id_aluno` int(250) NOT NULL auto_increment, `nome` varchar(250) NOT NULL, PRIMARY KEY (`id_aluno`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;CREATE TABLE `aluno_materia` ( `id_aluno` int(250) NOT NULL, `id_materia` int(250) NOT NULL, PRIMARY KEY (`id_aluno`,`id_materia`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;CREATE TABLE `materia` ( `id_materia` int(250) NOT NULL auto_increment, `nome` varchar(250) NOT NULL, PRIMARY KEY (`id_materia`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;INSERT INTO `aluno` VALUES (1, 'Andre');INSERT INTO `aluno` VALUES (2, 'Alisson');INSERT INTO `aluno` VALUES (3, 'João');INSERT INTO `aluno` VALUES (4, 'Maria');INSERT INTO `aluno` VALUES (5, 'Pedro');INSERT INTO `aluno_materia` VALUES (1, 8);INSERT INTO `aluno_materia` VALUES (2, 2);INSERT INTO `aluno_materia` VALUES (2, 5);INSERT INTO `aluno_materia` VALUES (3, 2);INSERT INTO `aluno_materia` VALUES (3, 4);INSERT INTO `aluno_materia` VALUES (4, 9);INSERT INTO `aluno_materia` VALUES (5, 1);INSERT INTO `materia` VALUES (1, 'matemática');INSERT INTO `materia` VALUES (2, 'português');INSERT INTO `materia` VALUES (3, 'história');INSERT INTO `materia` VALUES (4, 'geografia');INSERT INTO `materia` VALUES (5, 'quÃmica');INSERT INTO `materia` VALUES (6, 'fÃsica');INSERT INTO `materia` VALUES (7, 'ed. fÃsica');INSERT INTO `materia` VALUES (8, 'inglês');INSERT INTO `materia` VALUES (9, 'filosofia');INSERT INTO `materia` VALUES (10, 'biologia');
Bem, como dá pra perceber, ali em "aluno_materia" eu tenho duas chaves estrangeiras que referem-se exatamente aos ids dos alunos e das matérias. Eu faço um select usando JOIN para juntar os alunos com suas respectivas matérias, e mostro o id, o nome do aluno, e o nome da matéria:
> SELECT aluno.*,materia.nome as materia FROM aluno_materia JOIN aluno USING (id_aluno) JOIN materia USING (id_materia)
Até aí funciona tudo muito bem, muito bonito. Mas se vocês repararem, na tabela aluno_materia eu tenho:
> INSERT INTO `aluno_materia` VALUES (2, 2);INSERT INTO `aluno_materia` VALUES (2, 5);INSERT INTO `aluno_materia` VALUES (3, 2);INSERT INTO `aluno_materia` VALUES (3, 4);
Ou seja, duas matéria para um mesmo aluno.A questão é: Como faço um SELECT que retorne os resultados da mesma maneira que a query que eu coloquei ali em cima, mas que, quando tiver mais de uma matéria para o mesmo aluno, retorne no campo "materia" as duas (ou mais) matérias separadas por vírgula e não em duas linhas (como se fossem dois alunos distintos) da maneira que acontece na query que eu postei.PS: Quero isso numa única query.Agradeço antecipadamente. [http://forum.imasters.com.br/public/style_emoticons/](http://forum.imasters.com.br/public/style_emoticons/)default/thumbsup.gifCarregando comentários...