Re: Agrupar duas linhas de consulta em uma
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.