Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal como já comentei em outro topico estou desenvolvendo um sistema de apontamento de horas.
Está ficando muito bacana na verdade já estava pronto, porem achei bacana criar uma aprovação do gerente ai que estou encontrando problema.
time_data (armazena apontamento)
-- Estrutura da tabela time_data
--
CREATE TABLE IF NOT EXISTS `time_data` (
`time_id` int(10) NOT NULL AUTO_INCREMENT,
`user_id` int(10) NOT NULL DEFAULT '0',
`function_fk` int(10) NOT NULL,
`data_date` date DEFAULT NULL,
`type_id` int(10) NOT NULL DEFAULT '0',
`work_id_fk` int(10) NOT NULL,
`hours` double DEFAULT NULL,
`notes` text,
`user_appro_fk` int(10) DEFAULT NULL,
`status_appro` char(1) NOT NULL,
PRIMARY KEY (`time_id`),
KEY `user_id` (`user_id`),
KEY `type_id` (`type_id`),
KEY `work_id_fk` (`work_id_fk`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
--
-- Extraindo dados da tabela time_data
--
tabela de usuarios
-- Estrutura da tabela user_info
--
CREATE TABLE IF NOT EXISTS `user_info` (
`user_id` int(10) NOT NULL AUTO_INCREMENT,
`fname` varchar(50) DEFAULT NULL,
`lname` varchar(50) DEFAULT NULL,
`function_id_fk` int(10) NOT NULL DEFAULT '0',
`level` varchar(20) NOT NULL DEFAULT 'User',
`username` varchar(30) NOT NULL DEFAULT '',
`password` varchar(40) NOT NULL DEFAULT '',
PRIMARY KEY (`user_id`),
KEY `function_id_fk` (`function_id_fk`),
KEY `function_id_fk_2` (`function_id_fk`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
--
-- Extraindo dados da tabela user_info
Eu preciso gerar uma consulta assim:
Nome Completo | Função | Data | Tipo Horas | Projeto | obs | Aprovado | Aprovador
Porem estou me enrroscando para mostrar o aprovador, pois na verdade estou trabalhando com duas chaves estrangeiras, user_id e user_appro_fk, ambas trazem dados de uma unica tabela que é a user_info
Basicamente até agora montei a seguinte consulta:
select usr.fname, usr.lname, fun.function_desc, dat.function_fk, DATE_FORMAT(dat.data_date, '%d/%m/%Y') AS date_br, wor.work_name, dat.hours,
pro.description, dat.notes, dat.status_appro, CASE dat.status_appro
WHEN 'S' THEN 'Sim'
WHEN 'N' THEN 'Não'
END as status_appro, dat.user_appro_fk
from
user_info usr, user_functions fun, time_work wor, time_types pro, time_data dat
where dat.function_fk = fun.function_id and usr.user_id = dat.user_id and dat.type_id = pro.type_id and dat.work_id_fk = wor.work_id
and dat.user_id LIKE '%$user_id%' and dat.type_id LIKE '%$type_id%' and dat.status_appro LIKE '%$status_appro%' and dat.data_date between '$start_date' and '$end_date'
order by dat.data_date desc
os dados apresentado ficaram assim:
Nome Completo Função Data Tipo Horas Projeto obs Aprovado Aprovador
Marcos Sandrini Auxiliar de T.I 12/10/2013 HN 4 TESTE Sim 1
resumindo estou tendo problemas para mostrar o nome do aprovador, pois ja estou usando a consulta para mostrar o nome completo do usuário
Amigos ainda encontrei um erro na consulta,
Quando o apontamento ainda não for aprovado
o campo dat.user_appro_fk será igual a 0 . Dessa forma não existe comparação e nenhum registro será mostrado, para não aprovadas.
Até agora a unica ideia que eu tive é criar um usuário com o nome "Não Aprovado" e deixar como padrão ao incluir ou alterar horas, porem estou achando uma bambiarra muito ruim, alguem tem alguma ideia melhor ?
>
Amigos ainda encontrei um erro na consulta,
Quando o apontamento ainda não for aprovado
o campo dat.user_appro_fk será igual a 0 . Dessa forma não existe comparação e nenhum registro será mostrado, para não aprovadas.
Um outer join resolveria, creio, bastaria tratar o "null" na chave da fk.
Não estou conseguindo montar a consulta com outer join, alguem pode me ajudar ?
Ninguem ai tem uma ideia ? eu realmente não to conseguindo fazer
bem não acho uma gambiarra deixa um registro como padrão.
por que quando você faz join sempre tem q ter relacionamento.
Lucas Fernando , vamos lá :
Tentou fazer por outer join ?
É o caso de Outer Join (falta um registro do "outro lado") ?
Consegui resolver, porem fiz uma enorme consulta, se alguem tiver alguma solução um pouco menor eu agradeço ^^
$consulta = "select concat(usr.fname,' ',usr.lname) as full_funname , fun.function_desc,
dat.function_fk, DATE_FORMAT(dat.data_date, '%d/%m/%Y') AS date_br, wor.work_name, dat.hours, pro.description, dat.notes, dat.status_appro, CASE dat.status_appro
WHEN 'S' THEN 'Sim'
WHEN 'N' THEN 'Não'
END as status_appro, dat.user_appro_fk, app.user_id, concat(app.fname,' ',app.lname) as full_appname
from
user_info usr, user_functions fun, time_work wor, time_types pro, time_data dat, user_info app