- Como Criar Um Site, Blog – WebMaster.pt - http://www.webmaster.pt -

MySQL – Agrupando Registos

Tweet [3]

Nas matérias anteriores falamos bastante sobre formas específicas de se efetuar comandos como SELECT, INSERT ou UPDATE, porém, o MySQL não pára por aí.

Com o passar do tempo, o Programador começa a trabalhar em soluções mais específicas e importantes, o que torna necessário o uso de alguns comandos específicos.

Hoje falaremos sobre um comando essencial (especialmente para quem trabalha desenvolvendo soluções para médias e grandes empresas), a função de Agrupar Registros.

Só quem já pegou uma base de dados antiga (cheia de erros) e com problemas deixados por antigos programadores, sabe que recursos extras são essenciais, principalmente quando o cliente está com pressa!

Um dos problemas deixados é o de tabelas conterem campos com informações repetidas!

Em algumas situações, na hora da consulta é necessário trazer todos os dados agrupados e sem repetições!

Através do SELECT (em alguns casos – usando o DISTINCT) será possível solucionar o problema; Em outros, será necessário utilizar a cláusula GROUP BY.

Como você já sabe, em nossas matérias, procuramos sempre trazer além das informações, exemplos práticos!

Abaixo vamos simular uma situação, para falar mais sobre este conteúdo!

Criando as Tabelas na Base de Dados

Antes de partirmos para a programação, abra o arquivo script-sql.txt (disponível no ficheiro em anexo) e cole seu conteúdo no Programa utilizado para gerenciamento da base de dados.

OBS.: Neste ficheiro você deverá encontrar o código abaixo:


----- CRIANDO A TABELA tbl_produtos -----

CREATE TABLE `tbl_produtos` (
`id_produto` int(11) NOT NULL auto_increment,
`produto` varchar(150) NOT NULL,
`fabricante` varchar(150) NOT NULL,
`status` char(1) default NULL,
PRIMARY KEY  (`id_produto`)
);

----- INSERINDO DADOS NA TABELA tbl_produtos -----

INSERT INTO tbl_produtos VALUES('1','Geladeira','Consul','1');
INSERT INTO tbl_produtos VALUES('2','Fogão','Consul','1');
INSERT INTO tbl_produtos VALUES('3','Televisor','Sharp','1');
INSERT INTO tbl_produtos VALUES('4','Computador','STI','1');
INSERT INTO tbl_produtos VALUES('5','Notebook','Sharp','1');
INSERT INTO tbl_produtos VALUES('6','Sofá','CCS','1');
INSERT INTO tbl_produtos VALUES('7','Ventilador','FWM','1');
INSERT INTO tbl_produtos VALUES('8','Monitor','AOC','1');

Em nossas matérias de MySQL utilizamos como padrão o MySQLFront. Caso você queira utilizar este programa, clique em SQL Editor e cole o conteúdo do script (conforme imagem abaixo).

Criando a Tabela

Veja que na imagem abaixo ao efetuar o SELECT o sistema mostra todos os registros.

OBS.: Veja que os registros 1 e 2 possuem o mesmo fabricante.

Efetuando o Select

Na imagem abaixo ao efetuarmos o SELECT personalizado com o GROUP BY, aparecem apenas os fabricantes (sem repetições).

SELECT usando o GROUP BY

No exemplo anterior você fez o SELECT dos fabricantes usando o GROUP BY, porém, é possível fazer uso deste comando usando mais de um campo!

No exemplo a seguir, fazemos um SELECT personalizado utilizando mais de 1 campo (veja a imagem).

SELECT com o GROUP BY em 2 campos

OBS.: Veja que apesar de prático, ele não é eficiente (quando usamos o GROUP BY selecionando mais de 1 campo). O registro que contém o produto chamado ‘Geladeira’ não vem!

Isto acontece, porque o GROUP BY trouxe o conteúdo ordenando por fabricante (como ele ordena trazer apenas 1 registro de cada, 1 dos produtos foi retirado) da lista.

Bem… poderíamos dar vários exemplos do uso deste comando, mas na verdade, ele vai focar a ordenação em apenas 1 campo!

Foquei este artigo justamente porque alguns programadores não trabalham da maneira mais prática e com isso atrapalham outros que pegam sistemas grandes para dar suporte…

Aos que tem dificuldades de montar uma base de dados da forma correta (disponível também no ficheiro script-sql_novo.txt), vamos ao exemplo:

Tabela de Fabricantes

No exemplo abaixo a Tabela de Fabricantes trás “apenas” os nomes dos Fabricantes


----- CRIA A TABELA tbl_fabricantes -----

CREATE TABLE `tbl_fabricantes` (
`id_fabricante` int(11) NOT NULL auto_increment,
`fabricante` varchar(150) default NULL,
PRIMARY KEY  (`id_fabricante`)
);

INSERT INTO `tbl_fabricantes` (`id_fabricante`,`fabricante`) VALUES (1,'Consul');
INSERT INTO `tbl_fabricantes` (`id_fabricante`,`fabricante`) VALUES (2,'Sharp');
INSERT INTO `tbl_fabricantes` (`id_fabricante`,`fabricante`) VALUES (3,'CCS');
INSERT INTO `tbl_fabricantes` (`id_fabricante`,`fabricante`) VALUES (4,'FWM');
INSERT INTO `tbl_fabricantes` (`id_fabricante`,`fabricante`) VALUES (5,'STI');

Tabela de Produtos:

No exemplo abaixo a Tabela de Produtos trás os nomes dos Produtos, assim como o ID dos Fabricantes.


----- CRIA A TABELA tbl_produtos -----

CREATE TABLE `tbl_produtos` (
`id_produto` int(11) NOT NULL auto_increment,
`id_fabricante` int(11) NOT NULL default '0',
`produto` varchar(150) NOT NULL default '',
`status` char(1) default NULL,
PRIMARY KEY  (`id_produto`)
);

INSERT INTO `tbl_produtos` (`id_produto`,`id_fabricante`,`produto`,`status`) VALUES (1,1,'Geladeira','1');
INSERT INTO `tbl_produtos` (`id_produto`,`id_fabricante`,`produto`,`status`) VALUES (2,1,'Fogão','1');
INSERT INTO `tbl_produtos` (`id_produto`,`id_fabricante`,`produto`,`status`) VALUES (3,2,'Televisor','1');
INSERT INTO `tbl_produtos` (`id_produto`,`id_fabricante`,`produto`,`status`) VALUES (4,4,'Computador','1');
INSERT INTO `tbl_produtos` (`id_produto`,`id_fabricante`,`produto`,`status`) VALUES (5,3,'Notebook','1');
INSERT INTO `tbl_produtos` (`id_produto`,`id_fabricante`,`produto`,`status`) VALUES (6,5,'Sofá','1');
INSERT INTO `tbl_produtos` (`id_produto`,`id_fabricante`,`produto`,`status`) VALUES (7,3,'Ventilador','1');
INSERT INTO `tbl_produtos` (`id_produto`,`id_fabricante`,`produto`,`status`) VALUES (8,2,'Monitor','1');

OBS.: Imagine você com um banco de dados contendo mais de 3000 produtos cadastrados?

Usando esse tipo de estrutura, além dele ser mais leve, haverá uma facilidade ainda maior para gerenciar esses dados!

Bem… este é um exemplo prático e correto de como você estruturar sua tabela!

Nas próximas edições estaremos focando em buscas personalizadas em 2 ou mais tabelas!

Ficamos por aqui em mais uma matéria! Esperamos tê-lo ajudado em algo…

Envie-nos suas dúvidas e dê sugestões para as próximas matérias! Nosso compromisso é lhe ajudar!

Download do código: arquivo.zip [4]

Tweet [3]
Be Sociable, Share!
  • [5]
  • [6]
  • [7]
  • [8]
  • [9]