cardozo 0 Denunciar post Postado Janeiro 5, 2011 Pessoal tenho uma consulta que faz assim $texto = "Antônio José" SELECT * FROM bd WHERE campo like '%$texto%' ORDER BY -Numero ele seleciona palavras assim Antônio José, Antonio Jose, antonio jose antônio josé e na verdade queria que selecionasse registros apenas como digitado tem alguam forma de se fazer issu neste mesmo sql? agradecido Compartilhar este post Link para o post Compartilhar em outros sites
Haz 3 Denunciar post Postado Janeiro 5, 2011 campo = '$texto' Compartilhar este post Link para o post Compartilhar em outros sites
gugoan 0 Denunciar post Postado Janeiro 5, 2011 Use charset :Latin 1 e collation: latin1_general_ci que funciona! :D Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Janeiro 5, 2011 Haz campo = '$texto' so quando for numero -Numero ? é um campo ? Compartilhar este post Link para o post Compartilhar em outros sites
cardozo 0 Denunciar post Postado Janeiro 5, 2011 Haz campo = '$texto' so quando for numero -Numero ? é um campo ? seguinte campo = é um campo de texto no BD com aplavras acentuadas ou não, então numa frase pode ter palavras de todos os tipo então a variavel tem ques er exatamente = no campo nesta instrução sql tem alguma forma de conseguir fazer issu texto = "José Antônio Nogueira"; SELECT * FROM bd WHERE campo like '%$texto%' quero q lista apenas onde tiver essa frase no campo Compartilhar este post Link para o post Compartilhar em outros sites
Go Back 0 Denunciar post Postado Janeiro 5, 2011 Se você quer só o digitado... é o que o amigo do 1# Post Falou! =D SELECT * FROM bd WHERE campo = '$texto' Compartilhar este post Link para o post Compartilhar em outros sites
cardozo 0 Denunciar post Postado Janeiro 5, 2011 colocando latin1_general_cs deu certo mesmo SELECT * FROM BD WHERE campo like '%$texto%' mas agora ocorreu outra coisa se eu colocar uma frase assim texto = "apagar das luzes de ribalta" da certim, mas se tiver uma palavra acentuada neste meio ele nao acha texto = "apagar das lézes dê ribalta" nao encontra nada agradeço a ajuda de todos Compartilhar este post Link para o post Compartilhar em outros sites
CrY 1 Denunciar post Postado Janeiro 6, 2011 no banco de dados nao aceita acentuação ai você teria que usar o md5 para fazer busca desse tipo exemplo $texto = md5("o que você quer procurar"); mais na hora de mandar pro banco de dados tem que mandar em md5 tbm exemplo $nome = md5($_POST['nome']); pra quando fazer a busca vim com acento Compartilhar este post Link para o post Compartilhar em outros sites
Go Back 0 Denunciar post Postado Janeiro 6, 2011 PUTS! MD5 ? texto = "apagar das lézes dê ribalta" Só uma pergunta: você escreveu Lézes na hora de fazer a consulta ? usuahsha Compartilhar este post Link para o post Compartilhar em outros sites
Periscuelo 20 Denunciar post Postado Janeiro 6, 2011 O Amigo gugoan já te deu a dica do banco "Latin1 e collation: latin1_general_ci" Quanto a acentuação o latin1 aceita sim acentos normalmente amigo CrY. O que deve estar dando errado são os parametros enviados pelo PHP. Experimente fazer a consulta diretamente no phpMyAdmin ou no console do mysql. Se funcionar verifique os dados enviados via POST. Provavelmente vai precisar de usar um utf8_decode ou definir o charset de sua pagina para ISO-8859-1. Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
CrY 1 Denunciar post Postado Janeiro 6, 2011 hum entendi nao sei muito sobre os tipos de codificação mais sei um pouco de php eu faria com a função MD5() Compartilhar este post Link para o post Compartilhar em outros sites
Periscuelo 20 Denunciar post Postado Janeiro 6, 2011 Compreendo amigo CrY. So temos de tomar cuidado para não dar a orientação errada aos amigos do fórum sobre algo que não temos tanto conhecimento. Nem toda solução paleativa é a forma correta de se trabalhar. Procure pesquisar mais sobre Banco de Dados e charsets e você verá que existem soluções bem melhores doque md5 cuja a função é criptografar o código de forma que NUNCA MAIS você o recupere. Deixando então uma informação inutilizada no banco de dados uma vez que você pode precisar saber o nome do cliente. md5 é útil para criptografar senhas por exemplo, cujo a intenção é que realmente ninguém saiba a senha do cliente. Mas é assim mesmo, vivendo e aprendendo. :joia: Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
cardozo 0 Denunciar post Postado Janeiro 6, 2011 deixe-me explicar melhor tenho texto html formatado dentro de um campo long text no banco de dados, a função funcionava perfeitamente quando era php4, apos migrarem pro php5 tive q fazer algumas atualizações, e essa consulta foi uma delas $texto = "Rua José João da Silva" // pego de um form de pesquisa campo input se eu digitar apenas José João ele pega mas se digitar completo nao pega isntrução sql $id_query = mysql_query("SELECT * FROM Bd WHERE campo like '%$texto%' ORDER BY -Numero"); acho q fui claro agora to usando no relatorio de pesquisa assim rel_pesquisa.php <?php session_start(); $pesq_texto = ""; ?> <html> <head> <title>Documento sem título</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <? $_SESSION["pesq_texto"] = isset($_POST["texto"])?$_POST["texto"]:""; $texto = isset($_SESSION["pesq_texto"])?$_SESSION["pesq_texto"]:""; print "<b>Texto procurado:</b> <i>$texto</i><p></p>"; if(empty($texto)){ echo("Registro não encontrado"); }else{ include '../conexao.php'; $id_query = mysql_query("SELECT * FROM Bd WHERE campo like '%$texto%' ORDER BY -Numero"); if (!mysql_num_rows($id_query)) { echo('Nenhum registro localizado.'); }else{ echo("<table border=\"1\" width=\"100%\" bgcolor=\"#C0C0C0\" bordercolor=\"#FFFFFF\" cellspacing=\"0\" cellspacing=\"2\">"); echo("<tr>"); echo("<td width=\"5%\"><font face=\"Arial\" size=\"2\"><b>Nº</b></font></td>"); echo("<td width=\"8%\"><font face=\"Arial\" size=\"2\"><b>Data</b></font></td>"); echo("<td width=\"82%\"><font face=\"Arial\" size=\"2\"><b>Indice</b></font></td>"); echo("</tr>"); while ($arr = mysql_fetch_array($id_query)) { $ddata = $arr['Dialei'].'/'.$arr['Meslei'].'/'.$arr['Anolei']; echo("<tr>"); echo("<td valign=\"top\"><font face=\"Arial\" size=\"2\"><a href=\"mostrar.php?cd={$arr['Numero']}\">"); echo($arr['Numero']); echo("</a></td>"); echo("<td valign=\"top\"><font face=\"Arial\" size=\"2\">"); echo($ddata); echo("</td>"); echo("<td valign=\"top\"><font face=\"Arial\" size=\"2\">"); echo(str_replace($texto, "<b>".$texto."</b>", $arr['Indice'])); echo("</td>"); echo("</tr>"); } } } print "</table><p></p>"; print "<h1 align=\"center\"><a href=\"javascript:history.go(-1)\" target=\"_self\"><img src=\"imagens/voltar.gif\" width=\"30\" height=\"28\" border=\"0\"></a></h1> "; ?> </body> </html> Compartilhar este post Link para o post Compartilhar em outros sites
Periscuelo 20 Denunciar post Postado Janeiro 6, 2011 Amigo cardozo desconheço uma forma de pegar via banco de dados dentro de um campo longtext um trecho específico. Nunca manipulei Expressão Regular via Banco de Dados então não posso afirmar ou orienta-lo a fazer isto via banco de dados. O que você pode fazer é manter as %% porque é a unica forma (que conheço pelo menos) dele trazer todos os valores desejados. Porém entendo seu problema que é o fato dele trazer tudo que tenha rua, da, silva, José e adendos ao invés de trazer somente os endereços identicos. O que poderia ser feito é uma busca dentro do while ex: $array = array(); while ($row=mysql_fetch_assoc($query)) { if (strstr($row['endereco'], 'Rua José da Silva')) $array[] = $row; } //Abaixo vai o debug echo '<pre>'; print_r($array); Desta forma você vai ter os arrays cujo o endereço bate. Pegou a idéia? Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
cardozo 0 Denunciar post Postado Janeiro 6, 2011 Sim amigo, peguei, mas deixa eu citar como tá dentro do bancod e dados gravado e verás na vizualização é assim Art. 1º. Fica proibida a comercialização de qualuqer bebida alcolica na Rua José João da Silva, cabendo a polícia reprimir, até prender as pessoas q descumprimirem essa Lei. so que gravado no banco de dados assim <body> <p><strong>Art. 1º.</strong> Fica proibida a comercialização de qualuqer bebida alcolica na Rua José João da Silva, cabendo a polícia reprimir, até prender as pessoas q descumprimirem essa Lei.</p> </body> a pesquisa se faz para encontrar determinadas leis que tratam de organização da cidade. a pesquisa funciona se eu digitar somente duas palavras de pesquisa acentuada, e se forem sem acento, ele pega a instrução corretamente, nesta mesma pesquisa se eu procurar pela clausula $texto = prender as pessoas q descumprimirem essa Lei ele pega corretamente. o que me sugere agora? Compartilhar este post Link para o post Compartilhar em outros sites
CrY 1 Denunciar post Postado Janeiro 6, 2011 acho que ficaria assim <?php session_start(); $pesq_texto = ""; ?> <html> <head> <title>Documento sem título</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <? $_SESSION["pesq_texto"] = isset($_POST["texto"])?$_POST["texto"]:""; $texto = isset($_SESSION["pesq_texto"])?$_SESSION["pesq_texto"]:""; print "<b>Texto procurado:</b> <i>'.$texto.'</i><p></p>"; #concatena '.variavel.' if(empty($texto)){ echo("Registro não encontrado"); }else{ include '../conexao.php'; $id_query = mysql_query("SELECT * FROM Bd WHERE campo = "'.$texto.'" ORDER BY -Numero"); #concatena denovo aqui e olha esse -numero ta certo? if (!mysql_num_rows($id_query)) { echo('Nenhum registro localizado.'); }else{ echo("<table border=\"1\" width=\"100%\" bgcolor=\"#C0C0C0\" bordercolor=\"#FFFFFF\" cellspacing=\"0\" cellspacing=\"2\">"); echo("<tr>"); echo("<td width=\"5%\"><font face=\"Arial\" size=\"2\"><b>Nº</b></font></td>"); echo("<td width=\"8%\"><font face=\"Arial\" size=\"2\"><b>Data</b></font></td>"); echo("<td width=\"82%\"><font face=\"Arial\" size=\"2\"><b>Indice</b></font></td>"); echo("</tr>"); while ($arr = mysql_fetch_array($id_query)) { $ddata = $arr['Dialei'].'/'.$arr['Meslei'].'/'.$arr['Anolei']; echo("<tr>"); echo("<td valign=\"top\"><font face=\"Arial\" size=\"2\"><a href=\"mostrar.php?cd={$arr['Numero']}\">"); echo($arr['Numero']); echo("</a></td>"); echo("<td valign=\"top\"><font face=\"Arial\" size=\"2\">"); echo($ddata); echo("</td>"); echo("<td valign=\"top\"><font face=\"Arial\" size=\"2\">"); echo(str_replace($texto, "<b>".$texto."</b>", $arr['Indice'])); echo("</td>"); echo("</tr>"); } } } print "</table><p></p>"; print "<h1 align=\"center\"><a href=\"javascript:history.go(-1)\" target=\"_self\"><img src=\"imagens/voltar.gif\" width=\"30\" height=\"28\" border=\"0\"></a></h1> "; ?> </body> </html> Compartilhar este post Link para o post Compartilhar em outros sites
Periscuelo 20 Denunciar post Postado Janeiro 6, 2011 Amigo cardoso não entendi o que muda pelo fato de algumas pesquisas funcionarem e outras não. Seu problema não está sendo pesquisar com %% e o resultado vir com mais registros do que o solicitado na pesquisa ?? Resolva conforme o exemplo que citei. $texto = $_GET['texto']; //$texto = 'texto enviado via post ou get'; --> neste exemplo usei o get $array = array(); while ($row=mysql_fetch_assoc($query)) { if (strstr($row['endereco'], $texto)) $array[] = $row; } //Abaixo vai o debug echo '<pre>'; print_r($array); Qual o problema com esta solução? Qual o problema que você está enfrentando afinal? :huh: Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
Haz 3 Denunciar post Postado Janeiro 6, 2011 http://dev.mysql.com/doc/refman/4.1/pt/fulltext-search.html É MySQL? Dá uma lida ai e vê se é isso que procura. Haz campo = '$texto' so quando for numero Ah?! Compartilhar este post Link para o post Compartilhar em outros sites
cardozo 0 Denunciar post Postado Janeiro 6, 2011 amigo to aproveitado q ta respondendo rapido, fiz como pediu, mas tive q fazer umas mudanças, funionou, mas notei algo novamente o texto ta gravado em html assim <p ALIGN="JUSTIFY"><font face="Arial" size="2">Art. 1º. </b>O inciso VII do art. 2º da Lei nº 2707/2002, de 30/07/2002, que Estabelece condições básicas de proteção da coletividade contra a poluição sonora, passa a viger com a seguinte redação:</font></p> o que notei se buscar uma fraseque esteja antes da quebra de linha "Estabelece condições básicas de proteção da" ele pega normal mas se extender com a palavra depois de da assim "Estabelece condições básicas de proteção da coletividade contra a" ele não pega, e ai, o que fazer? opss a isncruç~]aoi sql de pesquisa $id_query = mysql_query("SELECT * FROM BD WHERE campo like '%" . $texto . "%' ORDER BY -Numero"); Compartilhar este post Link para o post Compartilhar em outros sites
Periscuelo 20 Denunciar post Postado Janeiro 6, 2011 Use a função rtrim() http://www.php.net/rtrim $texto = $_GET['texto']; //$texto = 'texto enviado via post ou get'; --> neste exemplo usei o get $array = array(); while ($row=mysql_fetch_assoc($query)) { if (strstr(rtrim($row['endereco']), $texto)) $array[] = $row; } //Abaixo vai o debug echo '<pre>'; print_r($array); Vale a pena dar uma lida no link do amigo Haz também. Parece ser uma solução em MySQL. Abraços. Compartilhar este post Link para o post Compartilhar em outros sites