Jump to content


Photo

Consulta Sql Complicada


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

#1 michelsinclair

michelsinclair

    Normal

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

Posted 30/01/2007, 17:07

to com um problema... me dá um help please... desculpem se aqui naum é o lugar certo pra este tipo de pergunta...

Seguinte:

Tenho um campo chamado palavraspat

imagine que tenho um resgitro neste campo com as seguintes palavras:

|arroz feijão macarrão|

eu quero selecionar por exemplo algum cliente que tenha feijão no campo... só que a comparação tem que ser feita pela palavra completa... no caso 'feijão'... o cara naum pode localizar por "fei" ou somente "jão"...

com o comando like eu consigo pegar parte da palavra... e o que eu preciso é pegar uma palavra completa dentro do campo que vai ter 3 palavras.... fui claro?

não posso usar where palavraspat = 'Feijão'... porque o registro esta assim : |arroz feijão macarrão|... me ajuda ae.... please...

Abraço a todos

Michel

#2 sk15

sk15

    Super Veterano

  • Usuários
  • 2071 posts
  • Sexo:Masculino
  • Localidade:SP - SP

Posted 31/01/2007, 02:16

Bem se as palavras sempre forem dividas por espaço vc pode fazer uma bela POG, pois no momento não me veio na mente nenhuma função do SQL que possa te ajudar, sem contar que vc não disse o banco (pois tem diferenças nas funções entre diversos bancos - porem pelos seus outros post é MySQL) ...

tipo assim bem por auto...

while(...) {
$palavras = explode(" ", $dados["palavraspat"]);
if (in_array("feijão", $palavras)) {
echo "Achei no Registro N#";
break;
}
}

Edição feita por: sk15, 31/01/2007, 02:17.


#3 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 31/01/2007, 09:18

certeza que com like não funfa?

tipo assim
select * from tabela where palavraspat LIKE '%Feijão%';

geralmente a gente usa isso quando precisa procura uma palavara dentro de um campo com ela e várias palavras.

A solução em código se usa só em ultimo caso ... tem que ver direitinho se o banco de dados já lhe entrega isso mastigadinho
(y)

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#4 Petry

Petry

    Veterano

  • Usuários
  • 1132 posts
  • Sexo:Masculino
  • Localidade:Caxias do Sul - RS
  • Interesses:- desenvolvimento WEB<br />- websemântica<br />- microformatos

Posted 31/01/2007, 10:08

Sou da mesma opinião do Savior, pois, independente se tiver mais de uma palavra o like buscara um tererminado texto em uma STRING e pro SGBD não importa se há mais de uma palavra...

Posted Image

- Desenvolvedor Python/ZOPE/Plone + ArchGenXML/Poseidon - Python + Django na Universidade de Caxias do Sul
- Desenvolvedor Python + Django na World News

Blog

#5 aimola

aimola

    Webdeveloper

  • Usuários
  • 471 posts
  • Sexo:Masculino
  • Localidade:Sampa

Posted 31/01/2007, 13:46

Se for Mysql, veja se as funções INSTR() ou LOCATE() te ajuda.

(y)
Que os passos de hoje sejam maiores que os de ontem
e que os passos de amanhã sejam mais largos que os de hoje.

#6 boirock

boirock

    Tecnologia para todos (agora hexa campeão)

  • Usuários
  • 1559 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR
  • Interesses:PostgreSQL - PHP

Posted 31/01/2007, 14:40

Se eu entendi bem o caso do camarada, LIKE não rola, pq se o cara procurar apenas jão, o LIKE vai encontrar feijão.... e ele quer que encontre só quando o cara procurar pela palavra inteira... no caso, só acha feijão quando for digitado feijão, com todas as letras!

Agora depende do banco de dados pra ver q função usar... tem vários jeitos!

E aí, qual éo banco?

[] rafael :boxing:

#7 michelsinclair

michelsinclair

    Normal

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

Posted 31/01/2007, 15:03

boirok... exatamente isto q vc disse.

o banco é MySQL agradeço desde já

o sql que eu fiz ta assim

$sqlbanner = ("select cadastro.id_cadastro from cadastro where palavraspat like ('%".$localizar."%')and ufpat like ('%".$UF."%') ;");

no $localizar tenho por exemplo "feijao" mas no campo palavraspat tenho gravado "arroz feijao batata"

Edição feita por: michelsinclair, 31/01/2007, 15:06.


#8 boirock

boirock

    Tecnologia para todos (agora hexa campeão)

  • Usuários
  • 1559 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR
  • Interesses:PostgreSQL - PHP

Posted 31/01/2007, 15:18

Meu caro... eu disse que tinha vários jeitos, mas na hora do vamos ver não achei nenhum!
Com certeza deve ter, mas não tenho conhecimento suficiente pra te dizer qual.

Pra não ficar sem resposta, vou postar uma baita gambiarra em que pensei(que dá até vergonha! rs..), mas q deve funcionar!

Se você quer procurar a palavra inteira, coloque um ESPAÇO antes e depois dela via código.
Para garantir que a primeira e a última palavra sejam incluídas nessa pesquisa de gambiarra, faça a mesma coisa com o seu campo.
Dessa forma, fica mais ou menos isso:

select cadastro.id_cadastro
from cadastro
where ' '||palavraspat||' ' like ('% ".$localizar." %')...

Observe que tem um espaço entre o % e a " no LIKE...
Dessa forma, se o cara procurar por jão, na verdade estará procurando por " jão " e não encontrará nada!

É... é isso! rs... Qualquer coisa, fala aí!

[] :boxing:

#9 michelsinclair

michelsinclair

    Normal

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

Posted 31/01/2007, 16:21

cara .... quase me matei de rir aqui... um pouco antes de entrar aqui no fórum pensei na mesma gambiarra... mas utilizei # no lugar de | .... rsrsrsrsrsrs.... o povo brasileiro é criativo mesmo...kkkkk valeu pela ajuda e atenção... abraço

#10 ::..Hunter..::

::..Hunter..::

    Turista

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

Posted 31/01/2007, 20:10

essa era muito óbvia, se não podia pegar parte da palavra e somente ela inteira e as palavras são sempre separadas por espaço ficou muito fácil né usar like com espaços?

Agora me diz pq as palavas são incluídas deste jeito e não apenas uma por campo???
Não tenho vícios, só bebo e fumo quando jogo!

#11 boirock

boirock

    Tecnologia para todos (agora hexa campeão)

  • Usuários
  • 1559 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR
  • Interesses:PostgreSQL - PHP

Posted 01/02/2007, 08:32

Essa é bem mais óbvia que a outra... :assobio:

[] :boxing:

#12 michelsinclair

michelsinclair

    Normal

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

Posted 01/02/2007, 08:54

concordo com o boirock..... como foi q vc naum percebeu? :assobio:

#13 aimola

aimola

    Webdeveloper

  • Usuários
  • 471 posts
  • Sexo:Masculino
  • Localidade:Sampa

Posted 01/02/2007, 12:08

E no caso de feijão começar com |feijão ?


;)
Que os passos de hoje sejam maiores que os de ontem
e que os passos de amanhã sejam mais largos que os de hoje.

#14 boirock

boirock

    Tecnologia para todos (agora hexa campeão)

  • Usuários
  • 1559 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR
  • Interesses:PostgreSQL - PHP

Posted 01/02/2007, 12:37

É, e nesse caso? rs...
Pelo que eu entendi não existe de fato o caractere | gravado no banco... Se existir, tem q ampliar a gambiarra pra substituir o | :P

[] rafael :boxing:

#15 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 01/02/2007, 15:27

Uma outra forma, se tratando de MySQL, seria através da função FIND_IN_SET().

Veja neste tópico: http://forum.wmonlin...howtopic=168678
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29




1 user(s) are reading this topic

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

IPB Skin By Virteq