Jump to content


Photo

Sql Com Like...


  • Faça o login para participar
10 replies to this topic

#1 finish

finish

    12 Horas

  • Usuários
  • 144 posts
  • Sexo:Não informado

Posted 15/03/2006, 08:44

Select rede.*,usuarios.* from rede LEFT JOIN usuarios ON(rede.usuario = usuarios.id) where rede.ip LIKE '%%' or rede.micro LIKE '%%' or usuarios.login LIKE '%%' or usuarios.nome LIKE '%%' and rede.area = 'CPD' ORDER BY rede.id

Executando este comando ele me resulta TODOS os registros da minha tabela, quando deveria me resultar somente os da área "CPD", se coloco um filtro no LIKE funciona certinho, pois pesquiso em 4 campos, mas quando filtro por área ele simplesmente não filtra.

Pq isso ? E qual é a forma correta ?

#2 ThiagoFrco

ThiagoFrco

    Novato no fórum

  • Usuários
  • 20 posts
  • Sexo:Não informado
  • Localidade:Campinas
  • Interesses:Php, Asp, JavaScript, Delphi, Oracle, etc...

Posted 15/03/2006, 09:11

pq faltou justamente o like...
tenta por ele la +/- assim...

Select rede.*,usuarios.* from rede LEFT JOIN usuarios ON(rede.usuario = usuarios.id) where rede.ip LIKE '%%' or rede.micro LIKE '%%' or usuarios.login LIKE '%%' or usuarios.nome LIKE '%%' and rede.area LIKE '%CPD%' ORDER BY rede.id


Só que... tem uma coisa... se voce quer trazer todo mundo, que tenha
rede.area like '%CPD%'
nao precisa colocar like pros outros... senao ele vai achar o primeiro e anular o resto...
Só um toque ae...

ve se da certo isso q eu te mandei ae...
Thiago de Oliveira Francisco
Programador: PHP, MySql, Delphi, Oracle
Conhecimentos: Asp, Coldfusion, Java, JavaScript, CSS, Fireworks, Dreamweaver, Flash

#3 finish

finish

    12 Horas

  • Usuários
  • 144 posts
  • Sexo:Não informado

Posted 15/03/2006, 09:54

pois ...

Select rede.*,usuarios.* from rede LEFT JOIN usuarios ON(rede.usuario = usuarios.id) where rede.area LIKE '%Distribuidores%' and rede.ip LIKE '%sp%' or rede.micro LIKE '%sp%' or usuarios.login LIKE '%sp%' or usuarios.nome LIKE '%sp%' ORDER BY rede.id LIMIT 0, 50

Coloquei por primeiro o like ali, mas ainda assim n filtra, o que acontece no meu sistema ?

Tenho uma procura, que vai nos campos micro, login, nome e ip procurando a string SP ali no caso, porém, qndo resulta a pesquisa há a opção para filtrar por área, o que resultaria os resultados da busca filtrados pela área, e é isto que ele não faz, e eu ñ entendo pq...

a forma que vc falou também não deu certo Thiago... e agora ?

#4 ThiagoFrco

ThiagoFrco

    Novato no fórum

  • Usuários
  • 20 posts
  • Sexo:Não informado
  • Localidade:Campinas
  • Interesses:Php, Asp, JavaScript, Delphi, Oracle, etc...

Posted 15/03/2006, 10:23

cara... talvez seja outro tipo de join...

e outra pergunta... qual eh o tamanho da sua base de dados?
eh muito grande?
pq vc usa tudo como texto... vc vai fazer o servidor senta veio...
e tem horas por causa de bug's.. ele nem chega a terminar a busca..
oq vc pode fazer eh dividir essa select... e uni-las depois!!
pode resolver o seu problema!
de cara.. vendo do jeito q eu estou vendo... esta tudo Ok..
Thiago de Oliveira Francisco
Programador: PHP, MySql, Delphi, Oracle
Conhecimentos: Asp, Coldfusion, Java, JavaScript, CSS, Fireworks, Dreamweaver, Flash

#5 finish

finish

    12 Horas

  • Usuários
  • 144 posts
  • Sexo:Não informado

Posted 15/03/2006, 10:58

esse é um echo que dei no comando $sql, é exatamente o que ele ta buscando...

pq vc diz modo texto ? n entendi...

axo que a saída será realmente eu dividir os likes, já que com um like e o where de área ele funciona, então, vou fazer um select aí para cada like, e o where, caso seja 0 o total de linhas retornados pula para o próximo like, caso no final n retorne nda, é que n tem nda com este filtro... axo q será o mais indicado não?

#6 finish

finish

    12 Horas

  • Usuários
  • 144 posts
  • Sexo:Não informado

Posted 15/03/2006, 12:10

ow, mas pensando aqui, dividir o sql não vai resultar o que eu quero...

chegou em um sql q me retorna 1 resultado... ja n vai para o próximo... enquanto que pode ter 3 resultados da busca no outro campo...

enfim, pq o sql ali ñ funciona como eu quero ? =)

#7 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 15/03/2006, 12:26

Se a área se chama 'CPD', assim tem que funcionar:
SELECT rede.*,
       usuarios.*
FROM rede
    LEFT JOIN usuarios
        ON (rede.usuario = usuarios.id)
WHERE rede.area = 'CPD'
ORDER BY rede.id

Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#8 ThiagoFrco

ThiagoFrco

    Novato no fórum

  • Usuários
  • 20 posts
  • Sexo:Não informado
  • Localidade:Campinas
  • Interesses:Php, Asp, JavaScript, Delphi, Oracle, etc...

Posted 15/03/2006, 12:40

[QUOTE]pq vc diz modo texto ? n entendi...[QUOTE]

Toda consulta via LIKE e modo texto!!

[/QUOTE]chegou em um sql q me retorna 1 resultado... ja n vai para o próximo... enquanto que pode ter 3 resultados da busca no outro campo...[QUOTE]

nao entendi!!!
hauhaua :D
Thiago de Oliveira Francisco
Programador: PHP, MySql, Delphi, Oracle
Conhecimentos: Asp, Coldfusion, Java, JavaScript, CSS, Fireworks, Dreamweaver, Flash

#9 finish

finish

    12 Horas

  • Usuários
  • 144 posts
  • Sexo:Não informado

Posted 15/03/2006, 13:29

Se a área se chama 'CPD', assim tem que funcionar:

SELECT rede.*,
       usuarios.*
FROM rede
    LEFT JOIN usuarios
        ON (rede.usuario = usuarios.id)
WHERE rede.area = 'CPD'
ORDER BY rede.id

sim, assim funciona e com uma clusula LIKE também... ex:

Select rede.*,usuarios.* from rede LEFT JOIN usuarios ON(rede.usuario = usuarios.id) where rede.area = 'CPD' and rede.micro LIKE '%sp%' ORDER BY rede.id LIMIT 0, 50

ASSIM funciona, OK, bem o que eu quero, porém, quero que ele pesquise também em outros campos da tabela pela string "sp"(no caso foi a que eu digitei)...


ou seja, o LIKE para de procurar nos outros campos quando encontra no 1º o que satisfaça a clausula... como faço para ser em vários campos ?

#10 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 15/03/2006, 15:50

Então pelo que entendi, então você quer usar o OR.
Encontrar num campo ou em outro.

No lugar de AND, troque por OR, e veja se é o que desejas.
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#11 finish

finish

    12 Horas

  • Usuários
  • 144 posts
  • Sexo:Não informado

Posted 15/03/2006, 16:36

Dexa eu refaze esse post...

Assim, tenho o form de procura...

efetuo a procura e ele me retorna tudo que achar nos 4 campos...

agora posso filtrar os resultados retornados pela area que esta em um select box, e aí ocorre o problema!

Ou ele simplesmente filtra NADA mesmo com o where, ou tenho que deixar só 2 campos(no caso o where = 'area' and like '%sp%', e isto somente com um LIKE, dois likes ja fera tudo...)

executando este sql no phpmyadmin:
Select rede.*,usuarios.* from rede LEFT JOIN usuarios ON(rede.usuario = usuarios.id) where rede.micro LIKE '%sp%' or usuarios.login LIKE '%sp%' or usuarios.nome LIKE '%sp%' or rede.ip LIKE '%sp%' and rede.area = 'CPD' ORDER BY rede.id 

ele me retorna TODOS os resultados que contenham SP(em qualquer um dos 4 campos), não cortando os que tenham area = 'CPD'(qndo eu filtro, pq isso ?

se eu colocar um and no lugar dos or, obviamente não vai retornar nda, pois vai obrigar que eu tenha todos os campos a palavra em pesquisa...

então, o que fazer ?

Edição feita por: finish, 15/03/2006, 17:05.





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq