Jump to content
Fórum Script Brasil
  • 0

O Que Há De Errado Na Instrucao Sql?


Halfar
 Share

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...