Ir para conteúdo
Fórum Script Brasil
  • 0

O Que Há De Errado Na Instrucao Sql?


Halfar

Pergunta

Eu executei este codigo tanto atraves de script php quanto diretamente no banco de dados mysql. Ambos retornam o mesmo resultado nas duas instrucoes abaixo, mas há algo errado nesta história.

Primeira instrucao:

Select Ementa, Texto, Linkagem, Processo, Tribunal, ID from DLJ where

(AnoPublicacao='2006') and (Tribunal = 'STJ - Superior Tribunal de Justica')

order by Data Desc

A instrucao acima me retornou 177 registros no meu BD.

Agora, a segunda instrucao:

Select Ementa, Texto, Linkagem, Processo, Tribunal, ID from DLJ where

(AnoPublicacao='2006') and (Tribunal = 'STJ - Superior Tribunal de Justica')

and (Ementa LIKE '%crime%') or ( Texto LIKE '%crime%') order by Data Desc

Esta instrucao me retornou 2000 registros.

Note que os parametros passados nas duas instrucoes são o mesmos, com exceção da instrucao like que foi acresentada na segunda instrucao. Oras, se na primeira instrucao, sem o like, me retornou 177 registros, na segunda instrucao com o like deveria me retornar um número menor de registros que foi encontrado na primeira instrucao, ou seja deveria ser menor que 177 registros.

O que há de errado nesta história?

A instrucao abaixo retornou um resultado mais coerente, mas nesta altura do campeonato nem dá para saber se está realmente correto.

Porque assim funciona, e do outro modo não funciona?

Select Ementa, Texto, Linkagem, Processo, Tribunal, ID from DLJ where

(AnoPublicacao='2006') and (Tribunal = 'STJ - Superior Tribunal de Justica'

and Ementa LIKE '%crime%' or Texto LIKE '%crime%') order by Data Desc

bem, dando continuidade ao tópico, fiz desta forma:

Select Ementa, Texto, Linkagem, Processo, Tribunal, ID from DLJ where

(AnoPublicacao='2006' and Tribunal = 'STJ - Superior Tribunal de Justica'

and Ementa LIKE '%crime%' or Texto LIKE '%crime%') order by Data Desc

retorna 2000 registros, está errado tambem. O aparentemente correto é o citado acima, retorna 82 registros.

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
Select Ementa, Texto, Linkagem, Processo, Tribunal, ID from DLJ where

(AnoPublicacao='2006') and (Tribunal = 'STJ - Superior Tribunal de Justica')

and (Ementa LIKE '%crime%') or ( Texto LIKE '%crime%') order by Data Desc

Esta instrucao me retornou 2000 registros.

Note que os parametros passados nas duas instrucoes são o mesmos, com exceção da instrucao like que foi acresentada na segunda instrucao. Oras, se na primeira instrucao, sem o like, me retornou 177 registros, na segunda instrucao com o like deveria me retornar um número menor de registros que foi encontrado na primeira instrucao, ou seja deveria ser menor que 177 registros.

O que há de errado nesta história?

Halfar, acho que ser você colocar de uma forma visualmente melhor, você consegue perceber onde reside a diferença:

SELECT Ementa, Texto, Linkagem, Processo, Tribunal, ID 
FROM DLJ 
WHERE (AnoPublicacao='2006') 
  AND (Tribunal = 'STJ - Superior Tribunal de Justica')
  AND (Ementa LIKE '%crime%') 
   OR (Texto LIKE '%crime%') 
ORDER BY Data DESC
observe que o fato de aparecer na cláusula WHERE o "OR (Texto LIKE '%crime%')" faz com que, além das restrições impostas pelos 3 outros filtros combinados com AND, sejam listados todos os registros onde TEXTO contenha "crime" (independente das outras restrições) Se você quer filtrar todos os registros que tenham AnoPublicacao=2006 e que o Tribunal=STJ - Superior Tribunal de Justica e que apareça "crime" nos campos Ementa ou Texto, então você tem que por um parênteses nesta última condição:
SELECT Ementa, Texto, Linkagem, Processo, Tribunal, ID 
FROM DLJ 
WHERE (AnoPublicacao='2006') 
  AND (Tribunal = 'STJ - Superior Tribunal de Justica')
  AND ((Ementa LIKE '%crime%') OR (Texto LIKE '%crime%'))
ORDER BY Data DESC

desta forma, você vai realmente ter um resultado mais restrito ao procurar por "crime" (ou seja, menos que os seus 177 registros iniciais).

Abraços

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...