Juninho14 0 Denunciar post Postado Dezembro 7, 2007 Bom tenho um select assim: $sql = pg_query("SELECT * from pacientes where lower(nome) like '%" . strtolower( $nome ) . "%' order by matricula"); daí quero achar a palavra Antônio, so que seu eu colocar sem o ^ ele me traz so os antonios que nao tem til... como faço para deixar global? Queria procurar por antonio e receber: antonio, antônio, antonió ántóníó hehe e etc... abração Compartilhar este post Link para o post Compartilhar em outros sites
MathBR 0 Denunciar post Postado Dezembro 7, 2007 Um jeito arcaico é substituir na query: $letras_especiais = array('á','ã','é','ê','í','ô','õ'); // aki você precisaria colocar TODAS as letras especiais; //na linha abaixo buscamos por estas letras especiais e substituimos pelo caracter % (coringa) foreach($letras_especiais as $l){ $nome = str_replace($l, '%', strtolower($nome)); //ja aproveitamos para deixar tudo minusculo aki nesta linha mesmo } $sql = pg_query("SELECT * from pacientes where lower(nome) like '%" . $nome . "%' order by matricula"); Compartilhar este post Link para o post Compartilhar em outros sites
Juninho14 0 Denunciar post Postado Dezembro 7, 2007 desse jeito funciona quando eu coloco "ANTÔNIO" com acento, ele traz geral, mas quando eu coloco "ANTONIO" ele nao traz os que estão como "ANTÔNIO" no banco, entende? Compartilhar este post Link para o post Compartilhar em outros sites
MathBR 0 Denunciar post Postado Dezembro 7, 2007 Entendi, é realmente não vou opinar mais por falta de ideias o que você precisa é complicado Voce pode tentar relacionar os nomes criando um array com as variações (trabalho imenso) ou mesmo fazer consulta tb com um pedaço do nome exemplo: "SELECT * from pacientes where lower(nome) like '%" . $nome . "%' OR lower(nome) LIKE '". $nome2 . "%' order by matricula"); onde nome = ANTONIO nome2=ANT Só que ai so ia dar certo em alguns casos (João por exemplo ia ser muito dificil) Por isso como eu disse "...não vou opinar mais por falta de ideias...", vou deixar os Prós te ajudarem nesta ;) Compartilhar este post Link para o post Compartilhar em outros sites
Juninho14 0 Denunciar post Postado Dezembro 7, 2007 se eu colocar assim: $letras_especiais = array('a','e','i','o','á','ã','é','ê','í','ô','õ','o','ú','u'); // aki você precisaria colocar TODAS as letras especiais; acho que funciona né? ele transfere a busca de joão para jo%o.. transfere a busca de joao para jo%o... daí acho q dá certo.. ou não? até agora deu hehe vlw pela força Compartilhar este post Link para o post Compartilhar em outros sites
MathBR 0 Denunciar post Postado Dezembro 7, 2007 Da certo sim so o problema é por exemplo maria iria buscar m%ri% que iria retorar maria mario tendeu? ( m +qualquerletra+ ri +qualquerletra) Compartilhar este post Link para o post Compartilhar em outros sites
Juninho14 0 Denunciar post Postado Dezembro 7, 2007 putz é verdade, cadastrei maria e mario, dai eles aparecem na mesma consulta realmente.... e agora? q q eu faço? Já procurei de tudo no google e não acho nada.. :( Compartilhar este post Link para o post Compartilhar em outros sites
MathBR 0 Denunciar post Postado Dezembro 7, 2007 putz é verdade, cadastrei maria e mario, dai eles aparecem na mesma consulta realmente.... e agora? q q eu faço? Já procurei de tudo no google e não acho nada.. :( Boa pergunta ;) como eu disse prefiro deixar os prós te ajudarem pois ja estou sem ideias Compartilhar este post Link para o post Compartilhar em outros sites
Juninho14 0 Denunciar post Postado Dezembro 7, 2007 deve ser algo nesta parte: "where lower(nome)" não? pq é alí q a parada vem do banco... vou continuar pesquisando Compartilhar este post Link para o post Compartilhar em outros sites
MathBR 0 Denunciar post Postado Dezembro 7, 2007 Na verdade você nem precisaria usar esta função (lower) no Mysql já que estamos transformando tudo em minusculo via php: $nome = str_replace($l, '%', strtolower($nome)); Compartilhar este post Link para o post Compartilhar em outros sites
Juninho14 0 Denunciar post Postado Dezembro 7, 2007 mas para comparar eu faço isso, pq agente diminui oq vem do usuário, e diminui o q esta guardado no banco. Quando eu guardo no banco eu não diminuo.. oolha o q eu fiz.. acho q ta certo: function tirarAcentosPalavra (&$nome_remover_Acento) { $letras_especiais = array('á','ã','â'); // aki você precisaria colocar TODAS as letras especiais; foreach($letras_especiais as $l){ $nome_remover_Acento = str_replace($l, 'a', strtolower($nome_remover_Acento)); //ja aproveitamos para deixar tudo minusculo aki nesta linha mesmo } $letras_especiais = array('ú'); // aki você precisaria colocar TODAS as letras especiais; foreach($letras_especiais as $l){ $nome_remover_Acento = str_replace($l, 'u', strtolower($nome_remover_Acento)); //ja aproveitamos para deixar tudo minusculo aki nesta linha mesmo } $letras_especiais = array('é','ê'); // aki você precisaria colocar TODAS as letras especiais; foreach($letras_especiais as $l){ $nome_remover_Acento = str_replace($l, 'e', strtolower($nome_remover_Acento)); //ja aproveitamos para deixar tudo minusculo aki nesta linha mesmo } $letras_especiais = array('í'); // aki você precisaria colocar TODAS as letras especiais; foreach($letras_especiais as $l){ $nome_remover_Acento = str_replace($l, 'i', strtolower($nome_remover_Acento)); //ja aproveitamos para deixar tudo minusculo aki nesta linha mesmo } $letras_especiais = array('ó','ô','õ'); // aki você precisaria colocar TODAS as letras especiais; foreach($letras_especiais as $l){ $nome_remover_Acento = str_replace($l, 'o', strtolower($nome_remover_Acento)); //ja aproveitamos para deixar tudo minusculo aki nesta linha mesmo } $letras_especiais = array('ú'); // aki você precisaria colocar TODAS as letras especiais; foreach($letras_especiais as $l){ $nome_inserir_Acento = str_replace($l, 'u', strtolower($nome_remover_Acento)); //ja aproveitamos para deixar tudo minusculo aki nesta linha mesmo } } ai a minha funcao que chama ela... /* Chamado pela controladora após o usuário preencher o nome do paciente */ function InputBuscarPaciente ($vars) { $lin = array (); $bet = array (); $nome = $vars['nome']; $nome_remover_Acento = $nome; $nome_remover_Acento = strtolower($nome_remover_Acento); $nome = strtolower($nome); $a = new pacientes (); $a = $this-> tirarAcentosPalavra ($nome_remover_Acento); $sql = pg_query("SELECT * from pacientes where lower(nome) like '%" . $nome_remover_Acento . "%' or lower(nome) like '%" . $nome . "%' order by matricula"); while ($lin = pg_fetch_array($sql)) { $e = new pacientes(); $e->preencherAtributosSelect($lin); $vet[]=$e; } $i = new interfaceSis(); $i -> resultadoInputBuscarPaciente ($vet); } qq eu fiz? fiz duas strings, uma com acento e outra sem acento... e fiz um or no select..., será q ta certo? ve se dá pra dar uma checada pra mim por favor. Compartilhar este post Link para o post Compartilhar em outros sites
MathBR 0 Denunciar post Postado Dezembro 7, 2007 BOA, em teoria deve funcionar na prática é você que vai me falar Você não precisa desta linha: $nome_remover_Acento = strtolower($nome_remover_Acento); por que em cada parte da função ja existe um strtolower Detalhe, você esta colocando o resultado da sua função na variavel $a mas não esta utilizando ela na query $a = $this-> tirarAcentosPalavra ($nome_remover_Acento); mude para $nome_remover_Acento = $this-> tirarAcentosPalavra ($nome); e remova $nome_remover_Acento = $nome; $nome_remover_Acento = strtolower($nome_remover_Acento); deve funcionar da forma como você quer Compartilhar este post Link para o post Compartilhar em outros sites
Juninho14 0 Denunciar post Postado Dezembro 7, 2007 É não funcionou não.. pq depois eu teria q por acento nas palavras q nao foram acentuadas na busca, ai fica dificil, pq eu teria q advinhar qual acento colocar... dificultou bastante.. a variável a é so um objeto q usei para chamar um metodo da propria classe... e agora??? ALGUEM ME AJUDAhhhhhhh!!!!!!! PleasE! edit FUNCIONOU !! ehhe minha query ficou assim $sql = pg_query("SELECT * from pacientes where lower(to_ascii(nome)) like lower(to_ascii('%$nome%')) order by matricula"); achei essa funçãozinha para postgresql, ficou show... vlw pela ajuda ein MathBr Compartilhar este post Link para o post Compartilhar em outros sites