Guga01 0 Denunciar post Postado Novembro 4, 2011 Olá pessoal! Estou desenvolvendo um sistema em php com mysql e tenho a seguinte tabela de folha de ponto: CREATE TABLE `folhas_ponto` ( `idFolhaPonto` int(9) unsigned zerofill NOT NULL auto_increment, `codigoSecreto` varchar(32) collate latin1_general_ci default NULL, `data` date NULL, `he` time NULL, ( hora de entrada ) `ha` time NULL, ( hora de almoço ) `hr` time NULL, ( hora de retorno do almoço ) `hs` time NULL, ( hora de saída ) `local` varchar(60) collate latin1_general_ci default NULL, `descricao` varchar(100) collate latin1_general_ci default NULL, `legenda` tinyint(1) NOT NULL default 0, `idFuncionario` int(9) unsigned zerofill NOT NULL, `dataCadastro` datetime NULL, `dataAtualizacao` datetime NULL, PRIMARY KEY (`idFolhaPonto`), FOREIGN KEY (`idFuncionario`) REFERENCES funcionarios(`idFuncionario`) ON DELETE RESTRICT ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; Os dados estão sendo gravados corretamente e cada linha da tabela significa um dia de trabalho do funcionário. O que eu gostaria era trazer em uma listagem os meses e anos distintos para depois, selecionando uma linha de determinado mês, trazer todos os dias trabalhados daquele mês. Fiz um select distinct month(data), year(data). Só que preciso da coluna codigoSecreto para saber qual linha da tabela estou selecionando. Daí, como cada código é diferente, os meses e anos se repetem por causa da coluna codigoSecreto. Gostaria de saber se existe uma solução para isso. Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Everton. 0 Denunciar post Postado Novembro 4, 2011 Bom vamos la, não sei se compreendi o seu problema de maneira correta. Mas pelo o que eu entendi, você quer trazer um série de tuplas com o total de dias trabalhados e agrupados por um determinado funcionário, correto ? - Eu nunca mechi com MySQL, mas a sintaxe SQL não deve fugir muito disso, é só adaptar. No oracle ficaria +- dessa maneira: Ao invéz da utilizar o campo `codigoSecreto` como parametro de unicidade, eu utilizaria o campo de `idFolhaPonto` cujo o mesmo é Primary Key com tipo serial (auto_increment) e valores únicos. SELECT extract (month from(data)), SUM(extract (day from(data))) FROM folhas_ponto WHERE extract (month from (data)) = ? GROUP BY 1; --No caso filtrei e agrupei pelo mês, mas dai é só fazer o join com a tabela funcionario e agrupar pelo mesmo. -- Ou, queira agrupar pelo 'codigoSecreto' como disse é só filtrar por ele mesmo: SELECT extract (month from(data)), extract (day from(data)) FROM folhas_ponto WHERE codigoSecreto = ? GROUP BY 1; Compartilhar este post Link para o post Compartilhar em outros sites
Henrique Barcelos 290 Denunciar post Postado Novembro 5, 2011 Não seria assim? SELECT extract (month from(data)), SUM(extract (day from(data))) FROM folhas_ponto WHERE extract (month from (data)) = ? GROUP BY codigoSecreto; Compartilhar este post Link para o post Compartilhar em outros sites