MySQL Forums
Forum List  »  Portuguese

Re: Agrupar duas linhas de consulta em uma
Posted by: Gustavo Gustavo
Date: September 03, 2015 07:30AM

Claro Marcelo Altmann:

Seguem estruturas das tabelas:

Tabela servico:

CREATE TABLE `salao`.`servico` (
`codigo_servico` int(10) unsigned NOT NULL AUTO_INCREMENT,
`nome_servico` varchar(100) NOT NULL,
PRIMARY KEY (`codigo_servico`)
) ENGINE=InnoDB AUTO_INCREMENT=462 DEFAULT CHARSET=latin1;


Tabela diasemana:

CREATE TABLE `salao`.`diasemana` (
`codigo_diasemana` int(10) unsigned NOT NULL AUTO_INCREMENT,
`nome_diasemana` varchar(15) CHARACTER SET latin1 NOT NULL,
PRIMARY KEY (`codigo_diasemana`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_general_mysql500_ci;


Tabela horariofuncionario:

CREATE TABLE `salao`.`horariofuncionario` (
`codigo_horariofuncionario` int(10) unsigned NOT NULL AUTO_INCREMENT,
`codigo_funcionario` int(10) unsigned NOT NULL,
`horario_horariofuncionario` varchar(5) CHARACTER SET latin1 NOT NULL,
`codigo_diasemana` int(10) unsigned NOT NULL,
`data_horariofuncionario` varchar(10) COLLATE utf8_general_mysql500_ci NOT NULL,
`codigo_statushorariofuncionario` int(10) unsigned NOT NULL,
PRIMARY KEY (`codigo_horariofuncionario`),
KEY `FK_horariofuncionario_1` (`codigo_funcionario`),
KEY `FK_horariofuncionario_2` (`codigo_diasemana`),
KEY `FK_horariofuncionario_3` (`codigo_statushorariofuncionario`),
CONSTRAINT `FK_horariofuncionario_1` FOREIGN KEY (`codigo_funcionario`) REFERENCES `funcionario` (`codigo_funcionario`),
CONSTRAINT `FK_horariofuncionario_2` FOREIGN KEY (`codigo_diasemana`) REFERENCES `diasemana` (`codigo_diasemana`),
CONSTRAINT `FK_horariofuncionario_3` FOREIGN KEY (`codigo_statushorariofuncionario`) REFERENCES `statushorariofuncionario` (`codigo_statushorariofuncionario`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8 COLLATE=utf8_general_mysql500_ci;


Tabela funcionario:

CREATE TABLE `salao`.`funcionario` (
`codigo_funcionario` int(10) unsigned NOT NULL AUTO_INCREMENT,
`cidade_funcionario` varchar(30) CHARACTER SET latin1 DEFAULT NULL,
`bairro_funcionario` varchar(30) CHARACTER SET latin1 DEFAULT NULL,
`logradouro_funcionario` varchar(30) CHARACTER SET latin1 DEFAULT NULL,
`cep_funcionario` varchar(9) CHARACTER SET latin1 DEFAULT NULL,
`complemento_funcionario` varchar(10) CHARACTER SET latin1 DEFAULT NULL,
`email_funcionario` varchar(60) CHARACTER SET latin1 DEFAULT NULL,
`telefone1_funcionario` varchar(15) CHARACTER SET latin1 DEFAULT NULL,
`telefone2_funcionario` varchar(15) CHARACTER SET latin1 DEFAULT NULL,
`telefone3_funcionario` varchar(15) CHARACTER SET latin1 DEFAULT NULL,
`codigo_estado` int(10) unsigned NOT NULL,
`foto_funcionario` varchar(100) CHARACTER SET latin1 DEFAULT NULL,
`email_salao` varchar(60) CHARACTER SET latin1 DEFAULT NULL,
`nome_funcionario` varchar(100) COLLATE utf8_general_mysql500_ci DEFAULT NULL,
`apelido_funcionario` varchar(30) COLLATE utf8_general_mysql500_ci DEFAULT NULL,
PRIMARY KEY (`codigo_funcionario`),
KEY `FK_funcionario_1` (`codigo_estado`),
KEY `FK_funcionario_2` (`email_salao`),
CONSTRAINT `FK_funcionario_1` FOREIGN KEY (`codigo_estado`) REFERENCES `estado` (`codigo_estado`),
CONSTRAINT `FK_funcionario_2` FOREIGN KEY (`email_salao`) REFERENCES `salao` (`email_salao`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_general_mysql500_ci;


Tabela servicofuncionario:

CREATE TABLE `salao`.`servicofuncionario` (
`codigo_servicofuncionario` int(10) unsigned NOT NULL AUTO_INCREMENT,
`codigo_funcionario` int(10) unsigned NOT NULL,
`codigo_servicosalao` int(10) unsigned NOT NULL,
PRIMARY KEY (`codigo_servicofuncionario`),
KEY `FK_servicofuncionario_1` (`codigo_funcionario`),
KEY `FK_servicofuncionario_2` (`codigo_servicosalao`),
CONSTRAINT `FK_servicofuncionario_1` FOREIGN KEY (`codigo_funcionario`) REFERENCES `funcionario` (`codigo_funcionario`),
CONSTRAINT `FK_servicofuncionario_2` FOREIGN KEY (`codigo_servicosalao`) REFERENCES `servicosalao` (`codigo_servicosalao`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_general_mysql500_ci;


Marcelo, fazendo essa query:

SELECT hf.codigo_horariofuncionario, s.nome_servico, ss.tempo_servicosalao, ss.preco_servicosalao,
hf.data_horariofuncionario, ds.nome_diasemana, f.nome_funcionario, f.apelido_funcionario,
f.foto_funcionario, GROUP_CONCAT(hf.horario_horariofuncionario) AS horario
FROM servicosalao ss
INNER JOIN servico s ON s.codigo_servico = ss.codigo_servico
INNER JOIN servicofuncionario sf ON sf.codigo_servicosalao = ss.codigo_servicosalao
INNER JOIN funcionario f ON f.codigo_funcionario = sf.codigo_funcionario
INNER JOIN horariofuncionario hf ON hf.codigo_funcionario = f.codigo_funcionario
INNER JOIN diasemana ds ON ds.codigo_diasemana = hf.codigo_diasemana
WHERE sf.codigo_servicosalao = 6 AND hf.data_horariofuncionario = '28/08/2015'
AND ds.nome_diasemana = 'Sexta-feira' AND hf.codigo_statushorariofuncionario = 1
GROUP BY hf.codigo_horariofuncionario, s.nome_servico, ss.tempo_servicosalao, ss.preco_servicosalao,
hf.data_horariofuncionario, ds.nome_diasemana, f.nome_funcionario;

Estou obtendo estes resultados:

22, 'Absolut control - hidratação L'Óreal', 30, '40,00', '28/08/2015', 'Sexta-feira', 'Ziraldo de Almeida Lopes', 'Guga', '', '13:00'
23, 'Absolut control - hidratação L'Óreal', 30, '40,00', '28/08/2015', 'Sexta-feira', 'Ziraldo de Almeida Lopes', 'Guga', '', '18:00'

Mas veja que a única coisa que muda nos resultados obtidos é o horario_horariofuncionario... preciso unir esses dois resultados em apenas uma linha.

Options: ReplyQuote


Subject
Views
Written By
Posted
Re: Agrupar duas linhas de consulta em uma
969
September 03, 2015 07:30AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.