[ GuTo ] 0 Denunciar post Postado Janeiro 14, 2007 Olá pessoal, Tenho duas tabelas em meu banco de dados MySQL 5, sendo: - usuarios ( id, nome) - usuarios_telefones ( id, id_usuario, telefone ) A tabela usuarios, guarda todos os usuarios cadastrados. A tabela usuarios_telefones, guarda os numeros de telefone de cada usuários, sendo que cada usuário, pode ter um ou mais telefones. Quero fazer uma instrução que me retorne o usuario e seus telefones. Fiz uma instrução SQL assim: SELECT u.id, u.nome, t.telefone FROM usuarios AS s INNER JOIN usuarios_telefones AS t ON s.id = t.id_usuarioBeleza, está tudo quase certo.Se o usuário tiver um telefone, beleza. A instrução vai me retornar apenas um registro (row). Ex.: 25, guto, 5134761122 Agora, se o usuário tiver mais de um telefone, ele vai me devolver X registros, de acordo com o numero de telefones que o usuario tiver. Por ex, eu tenho telefone de casa, celular e da empresa, meus. Executando esta instrucao SQL, vai me retornar assim, 3 registros (rows): 25, guto, 5134761122 25, guto, 5134763344 25, guto, 5134765566 E o que eu gostaria, é que me retornasse, algo assim: 25, guto, 5134761122, 5134763344, 5134765566 sendo id do usuario, nome do usuario, telefone1, telefone2 e telefone3. Talvez com STORED PROCEDURE ou uma VIEW eu consiga ter isso... Alguém tem idéia? Compartilhar este post Link para o post Compartilhar em outros sites
cassitos 2 Denunciar post Postado Janeiro 15, 2007 E ae, você pode utilizar o Group_Concat para agrupar estes registros sem ser que sejam retornados em várias linhas, o único prob. é que estes registros ficarão em apenas uma coluna, separados por um caracter que você definir, ex: CREATE TABLE `usuario` ( `ID_USU` int(11) NOT NULL auto_increment, `NOME_USU` varchar(50) default NULL, PRIMARY KEY (`ID_USU`) ) ENGINE=MyISAM; CREATE TABLE `usuariotel` ( `ID_TEL` int(11) NOT NULL auto_increment, `ID_USU` int(11) default NULL, `TELEFONE` varchar(20) default NULL, PRIMARY KEY (`ID_TEL`) ) ENGINE=MyISAM; insert into `usuario` (`ID_USU`,`NOME_USU`) values (1,'Teste'); insert into `usuario` (`ID_USU`,`NOME_USU`) values (2,'Teste2'); insert into `usuariotel` (`ID_TEL`,`ID_USU`,`TELEFONE`) values (1,1,'2544-2568'); insert into `usuariotel` (`ID_TEL`,`ID_USU`,`TELEFONE`) values (2,1,'3333-2222'); insert into `usuariotel` (`ID_TEL`,`ID_USU`,`TELEFONE`) values (3,1,'4578-9865'); Query: SELECT USU.ID_USU,USU.NOME_USU, /*Agrupar todos os telefones (ordenados) do usuário*/ GROUP_CONCAT(TEL.TELEFONE ORDER BY TEL.TELEFONE SEPARATOR ';') AS TELEFONES FROM usuario USU INNER JOIN usuariotel TEL ON TEL.ID_USU = USU.ID_USU /*Agrupado por usuário*/ GROUP BY USU.ID_USU ORDER BY USU.NOME_USU Quiser saber mais sobre o group_concat veja neste link. Compartilhar este post Link para o post Compartilhar em outros sites
[ GuTo ] 0 Denunciar post Postado Maio 4, 2007 Cara, já tinha visto sua resposta mas não tinha testado ela pq não tinha precisado dela.Mas voltei aqui agora, testei e funcionou redondinho. Você é fera!Valeu mesmo.Boa sexta e um bom findi.Abraços! Compartilhar este post Link para o post Compartilhar em outros sites
[ GuTo ] 0 Denunciar post Postado Maio 4, 2007 Conhece um comando parecido para M$ SQL SERVER?versão 2000 de preferência, mas se tiver pro 2005, beleza. Compartilhar este post Link para o post Compartilhar em outros sites
cassitos 2 Denunciar post Postado Maio 5, 2007 putz cara...SQL Server só usei uma vez em toda minha vida... ehehehenem sei. :( Compartilhar este post Link para o post Compartilhar em outros sites