Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Denys Fonseca

Listar usuários que nao realizaram testes

Recommended Posts

Boa tarde amigos,

 

desenvolvemos um sistema na empresa para realização de testes de esd, nela fizemos um relatorio de pessoas que realizaram os testes, e agora solicitaram uma nova listagem com pessoas que nao realizaram.

 

as tabelas são:

CREATE TABLE IF NOT EXISTS `linhas` (
`id` int(11) NOT NULL,
  `descricao` varchar(255) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `testes` (
`id` int(11) NOT NULL,
  `created` datetime DEFAULT NULL,
  `pulseira` tinyint(1) DEFAULT NULL,
  `calcanheira_esquerda` tinyint(1) NOT NULL,
  `calcanheira_direita` tinyint(1) NOT NULL,
  `visitante` varchar(255) DEFAULT NULL,
  `usuario_id` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=824 DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `turnos` (
`id` int(11) NOT NULL,
  `descricao` varchar(45) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `usuarios` (
`id` int(11) NOT NULL,
  `matricula` int(10) unsigned NOT NULL,
  `nome` varchar(255) NOT NULL,
  `linha_id` int(11) NOT NULL,
  `turno_id` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=259 DEFAULT CHARSET=latin1;
para a listagem, é passada a data de inicio e fim que normalmente é o mesmo dia, e a escolha da linha é obrigatória.
a listagem dos usuários que realizaram o teste no dia se da por
$this->set('Testis', $this->Testis->query("SELECT TESTE.DATA, TESTE.NOME, RES.pulseira, RES.calcanheira_esquerda, RES.calcanheira_direita
FROM TESTES AS RES
INNER JOIN (
SELECT IF( HOUR(TESTES.CREATED)>22, DATE_FORMAT( DATE_ADD( TESTES.CREATED, INTERVAL 1
DAY ) , '%d/%m/%y' ) , DATE_FORMAT( testes.created, '%d/%m/%y' ) ) AS
DATA , usuarios.nome AS NOME, max( testes.id ) AS id
FROM testes
RIGHT JOIN usuarios ON ( testes.usuario_id = usuarios.id)
GROUP BY usuarios.nome, DATA
) AS TESTE ON ( TESTE.id = RES.id )
LEFT JOIN usuarios AS usuario ON ( res.usuario_id = usuario.id )
where ".$cond." "));
porem, nao estamos conseguindo realizar a listagem dos que nao realizaram o teste no dia selecionado.
alguem tem alguma luz?
grato pela atenção

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

fizemos um relatorio de pessoas que realizaram os testes, e agora solicitaram uma nova listagem com pessoas que nao realizaram.

 

 

se vc sabe quem fez o teste e tem uma lista disso, todos q nao estiveram na lista nao fizeram o teste...

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim amigo, isso eu sei.

 

 

porem quem me solicitou a listagem das pessoas que nao realizaram o teste, nao quer ter trabalho de descobrir uma por uma e de qual linha que elas pertencem, pois, temos setores divididos aq...linha 1, linha 2, linha 3, etc...etc...etc...

e necessitam da listagem de acordo com a consulta, pois a seleção da linha, como informei, é obrigatoria.

Compartilhar este post


Link para o post
Compartilhar em outros sites

basicamente...

select * from usuarios where id not in (select usuario_id from testes)

depois vc enfeita o pavao...

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentei fazer desta forma antes de postar aqui...porem me retornou null,

enfeitar o pavão..haha essa nao havia visto ainda. rsrs

 

entao, havia tentado enfeitar o pavão pra se adequar as necessidades dos select boxes de data_inicio e data_fim e a linha que seria pesquisada tb..

 

mas sem sucesso..

ainda estou analisando o q posso fazer

 

msm assim so seu comentario ja me mostrou q estou no caminho certo.

=D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode também fazer um outer join com a tabela testes e ver no where se a chave desta está nula.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A solução básica e mais simples é a passada pelo giesta (#4) , não tem muito mistério.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.