Arquivo da tag: caneca

Mysql – Desafio: Relacionar 3 tabelas e exibir informações no mesmo select

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)

Caneca Brainatwork TI

O desafio esta lançado… e não esqueça de preencher os comentários com seu e-mail correto.

have fun!