Ir para conteúdo

POWERED BY:

Arquivado

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

Shakinet

Filtrar dados de mais que uma tabela

Recommended Posts

Olá a todos!

 

Estou fazendo um trabalho para a requisição de material. Tenho três tabelas no mysql (as que interessam para o momento):

 

material (tabela para o material)

id_material

marca

modelo

id_sala

id_categoria

observacoes

requisicoes (tabela para registar as requisições)

id_requisicao

id_material

requisitante

data1

hora1

id_sala

estado

devolucoes (tabela para registar as devoluções do material)

id_devolucao

id_requisicao

data

hora

devolutivo

Agora, quando vou requisitar um material, pretendo uma list-box onde aparecem os materiais disponiveis, ou seja, os que não estão requisitados. Para tal fiz este select:

 

"SELECT material.id_material AS 'id_material2', material.marca, material.modelo, requisicoes.id_material FROM material, requisicoes WHERE material.id_material <> requisicoes.id_material"

Necessito da marca e do modelo do material para mostrar na list-box e do id do mesmo para depois poder mandar para a requisição.

 

A verdade é que este não está funcionando correctamente.... Pois na list-box está a aparecer os dois materiais que podem sser requisitados e o que está requisitado duas vezes..... e só deveria aparecer os dois que não estão requisitados.

 

Alguém me pode ajudar? É mesmo urgente... já tentei de várias maneiras e penso que a meu ver está bem escrito o SELECT... mas não percebo porque não funciona correctamente.

 

 

:unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT 
DISTINCT material.id_material AS 'id_material2', 
material.marca, 
material.modelo, 
requisicoes.id_material 
FROM material INNER JOIN requisicoes ON requisicoes.id_material IS NOT NULL
WHERE material.id_material NOT IN (SELECT requisicoes.id_material FROM requisicoes)

 

O distinct deve te ajudar a se livrar dos duplicados. Agora, você pode ter uma queda no rendimento dessa query, se a tabela requisições tiver muitos dados, porque a cada linha da tabela material, vai ser feito um sub SELECT na tabela requisicoes afim de comparar se o id do material está lá.

O INNER JOIN vai garantir que só os dados que não forem NULL entraram no SELECT, mas acho que nem precisa pra falar a verdade

Vê aí como fica e me fala

Compartilhar este post


Link para o post
Compartilhar em outros sites

seguinte,

os materiais que estão na tabela devoluções devem aparecer na consulta?

se não

 

select id_material,  marca, modelo, id_sala, id_categoria
from material 
where id_material not in (select id_material from requisicoes)
and id_material not in (select id_material from devolucoes)

se sim

select a.id_material,  marca, modelo, id_sala, id_categoria
from material a, devolucoes b
where a.id_material = b.material
and id_material not in (select id_material from requisicoes)

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.