E ae galerinha, prontos para o desafio? Vamos la, primeiro vamos conhecer o banco de dados, segue abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | -- -- Estrutura da tabela `categorias` -- CREATE TABLE IF NOT EXISTS `categorias` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(100) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ; -- -- Extraindo dados da tabela `categorias` -- INSERT INTO `categorias` (`id`, `nome`) VALUES (1, 'legal'), (2, 'alegre'), (3, 'inteligente'), (4, 'divertido'), (5, 'sorridente'), (6, 'engraçado'); -- -------------------------------------------------------- -- -- Estrutura da tabela `relacao` -- CREATE TABLE IF NOT EXISTS `relacao` ( `usuario` int(11) NOT NULL, `categoria` int(11) NOT NULL, UNIQUE KEY `usuario` (`usuario`,`categoria`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -- Extraindo dados da tabela `relacao` -- INSERT INTO `relacao` (`usuario`, `categoria`) VALUES (1, 1), (1, 5), (1, 6), (2, 2), (2, 4), (2, 5), (3, 5), (3, 6), (4, 1), (4, 4), (4, 6); -- -------------------------------------------------------- -- -- Estrutura da tabela `usuarios` -- CREATE TABLE IF NOT EXISTS `usuarios` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(100) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; -- -- Extraindo dados da tabela `usuarios` -- INSERT INTO `usuarios` (`id`, `nome`) VALUES (1, 'magno'), (2, 'diogo'), (3, 'daniel'), (4, 'tayna'); |
Devidamente apresentado o banco de dados, vamos as explicações. Como da pra perceber, são 3 tabelas contendo respectivamente uma lista de categorias, uma lista de relacionamentos e uma lista de usuários. Mas porque três tabelas e não duas? Porque sim! ;P~ Porque cada usuário pode ter N categorias relacionadas.
Ai esta o desafio, fazer um select que mostre a lista de usuários (sem repetir o usuário) e suas categorias relacionadas em apenas uma linha (um select). Como por exemplo:
1 2 3 4 5 | NOME | CATEGORIAS ---------------------------- magno | legal, sorridente, engraçado diogo | alegre, divertido, sorridente etc... |
Prêmio: Uma caneca exclusiva da Brainatwork TI (enviamos para qualquer lugar do mundo)
O desafio esta lançado… e não esqueça de preencher os comentários com seu e-mail correto.
have fun!


outubro 24th, 2011 at 15:35
Segue ai a minha solução:
select relacao.usuario, GROUP_CONCAT(categorias.nome) as categoria from categorias, relacao, usuarios where categorias.id = relacao.categoria and relacao.usuario = usuarios.id group by relacao.usuario
Valeuuu
outubro 24th, 2011 at 15:52
SELECT usuarios.nome, GROUP_CONCAT(categorias.nome) AS categoria FROM categorias, relacao, usuarios WHERE categorias.id = relacao.categoria AND relacao.usuario = usuarios.id GROUP BY relacao.usuario
outubro 24th, 2011 at 15:55
Luis, saiu na frente… vários tentaram mas você bateu o record. Em apenas uma hora resolveu com louvor o desafio! Parabéns a caneca vai chegar para você atravez das mãos (nada confiaveis) de Magno, beleza? auehaeuhaeueahhaeu… valeu… e até a proxima!!!
Quem quiser postar alternativas, esteja a vontade… mas a caneca, so na próxima agora! ;)
outubro 24th, 2011 at 16:02
Valeuu. aguardo a caneca! /
outubro 24th, 2011 at 16:21
Ae Douglas, voce trabalha junto com o Luis, ae não vale, ele foi mais rápido. Ainda essa semana vou fazer outro desafio, ok? :)
outubro 24th, 2011 at 16:28
ok, o proximo vou ser mais rápido hehe
outubro 24th, 2011 at 17:01
So para ilustra o resultado do Luis, foi o seguinte:
usuario | categoria
1 | legal,sorridente,engraçado
2 | alegre,divertido,sorridente
3 | sorridente,engraçado
4 | legal,divertido,engraçado
… é isso ae.. até a proxima pessoal! :)