Busca SQL

11 respostas
S

Pessoal, tenho as seguintes variáveis:

data1;

data2;

ocorrencia;

elemento;
Criei uma pagina(jsp) de busca que deverá realizar as seguintes instruções:

a. buscar todos os registros em um determinado periodo(entra a data1 e a data2);

b. buscar todos os registros em um determinado periodo(entra a data1 e a data2) de acordo com a ocorrencia;

c. buscar todos os registros em um determinado periodo(entra a data1 e a data2) de acordo com o elemento;

d. buscar todos os registros independentemente do periodo de acordo com a ocorrencia;

e. buscar todos os registros independentemente do periodo de acordo com o elemento;

f. buscar todos os registros independentemente do periodo de acordo com a ocorrencia e com o elemento;

Dai crirei a seguinte instrução sql:

setSql("SELECT * FROM Registros WHERE (var_data BETWEEN ? AND ?) OR ocorrencia=? OR elemento=?)

As interrogações fazem referencia ao preparedStatement que vai logo abaixo da instrução. No entanto minha dúvida eh justamente em cima dessa busca.

O que está acontecendo durante a busca:

  1. Consigo realizar a busca do item “a”;
  2. Não consigo realizar a busca do item “b”;
  3. Não consigo realizar a busca do item “c”;
  4. Consigo realizar a busca do item “d”;
  5. Consigo realizar a busca do item “e”;
  6. Não consigo realizar a busca do item “f”;

Pois então, acho que quem já está mais familiarizado com o SQL poderá me ajudar com essa dúvida :slight_smile:

Desde já, obrigado!

11 Respostas

B

Você vai ter q mudar o OR por AND nos casos que se aplicam.

cassioso

Sugiro que você crie mais de uma instrução SQL para suas buscas.

E acho que sua lógica dos OR e AND está incorreta. Um pouco confusa… Eu faria uma SQL para cada consulta.

P

testa isso

SELECT * FROM Registros WHERE ((var_data BETWEEN ? AND ?) AND ocorrencia=?) OR ((var_data BETWEEN ? AND  elemento=?) OR(var_data BETWEEN ? AND ?)
cassioso

Mais uma vez defendendo a idéia de fazer uma SQL para cada consulta:

Fazer apenas uma SQL vai deixar seu c[odigo com um certo acoplamento… Imagine se você tiver que modificar uma destas consultas? Terá que se preocupar com todas as outras, talvez fazer alguma gambiarra para que todas funcionem, testar todas elas… etc…

Fazendo uma SQL para cada consulta, elas ficam independentes, não é necessário se preocupar com as outras consultas quando for alterar uma delas e o código vai ficar mais legível.

S

humm
É verdade, concordo com você que a idéia de diversas SQL’s pode ser uma boa saida.

Vou testar o exemplo acima, caso não funcione eu corro para o plano b :slight_smile:

Obrigado a todos pela ajuda

S

Puka:
testa isso

SELECT * FROM Registros WHERE ((var_data BETWEEN ? AND ?) AND ocorrencia=?) OR ((var_data BETWEEN ? AND elemento=?) OR(var_data BETWEEN ? AND ?)

Opa!

Puka! por algum motivo a ultima consulta “OR (var_data BETWEEN ? AND ?)” não está funcionando. Por exemplo, depois que executo a “(var_data BETWEEN ? AND ?) AND ocorrencia=?)” não consigo executar a ultima instrucao (que seta somente as datas, sem elemento nem ocorrencia).
Ocorre que aparentemente a instrução que filtra também pela ocorrencia é até executada porém continua sempre mostrando todos os valores entre as datas (e não com o filtro da ocorrencia, como deveria ser)

Creio que está ocorrendo algum bug no MySQL, sei lá! muito estranho!

cassioso

Este OR do meio não está estranho não?

SELECT * FROM Registros WHERE ((var_data BETWEEN ? AND ?) AND ocorrencia=?) OR ((var_data BETWEEN ? AND elemento=?) OR(var_data BETWEEN ? AND ?)

Este trecho:

OR ((var_data BETWEEN ? AND  elemento=?)

não deveria ser apenas

OR ((var_data BETWEEN ? AND ? )

ou

OR (((var_data BETWEEN ? AND ? ) OR/AND (elemento=?))

?

Ainda acho que deveria separar esses negócios.

S

opa meu velho!

pois então, não apenas copiei e colei o código dela no meu hehehe fiz esses pequenos ajustes, assim como você descreveu, e não funcionou =/

tipo, se eu faço o comando sql somente com:
((var_data BETWEEN ? AND ?) AND ocorrencia=?) OR ((var_data BETWEEN ? AND ?) AND elemento=?)
funciona perfeitamente, o problema ocorre quando acrescento mais um comando para, por exemplo, procurar somente pela data, sem ocorrencia, nem elemento

captou a mensagem? :slight_smile:

S

Oi?

cassioso

:!:

S

kkkkkkkk blza!
8)

Criado 8 de outubro de 2008
Ultima resposta 8 de out. de 2008
Respostas 11
Participantes 4