Carcleo 4 Denunciar post Postado Julho 1, 2008 Ola. Tem um campo na minha tabela onde o usuario grava o código de devedores relacionados com seus credores tipo: 02-25 (Exigencia do meu cliente) onde 02 é o código da empresa e 25 é o código que ele escolheu para o devedor. Esse 02-25 é digitado mesmo, manualmente. Só que numa listagem devedores, o meu cliente quer que lista ordenando-os por código. Porem, para poder por um - entre os cfódigos da empresa e do devedor na composição do codigo do devedor, eu usei como cod varchar(10). Dai, eu preciso de uma função slq para o banco MySql que converta esse 02-25 varchar em number para poder ordena-lo por código. Na realidade, eu até consigo ordena-lo como varchar mesmo porem, ele da o problema abaixo. vou por aqui os códigos que to usando: Tenho a seguinte string sql: SELECT * FROM devedores WHERE razao or nome like '%$pesquisa%' order by codtb tentei SELECT * FROM devedores WHERE razao like '%$pesquisa%' or nome like '%$pesquisa%' order by cod Obs.: $pesquisa é uma variavel php que vem de um formulario html que traz o texto a ser pesquisado. Estão acontecendo 2 problemas que não to consguindo resolver. Se alguem puider me ajudar: 1) Ele faz a conmsulta so pro campo razao e para. Pro campo nome ele não ta fazendo e se eu inverter, por o nome primiro ai ele faz a consulta do nome e não faz a conmsulta por razao. Eu preiso das duas pois ora o campo razao sera prenchiodo(Firmas) ora o campo nome (fisica). 2) Ele retorna os registros em ordem de codigo assim: 100 10 11 12 13 200 21 22E eu preciso assim: 10 11 12 13 21 30 80 99 100 200 Tem, jeito? Compartilhar este post Link para o post Compartilhar em outros sites
cassitos 2 Denunciar post Postado Julho 1, 2008 Oi. Tem sim. Primeiro você tem que acertar este seu where: SELECT * FROM devedores WHERE razao or nome like '%$pesquisa%' order by cod Você não pode fazer isto razao or nome like '%%', pode não dar erro, mas não vai funcionar como quer. Mais detalhes consulte o manual do mysql no site do mysql. Se for usar só um campo, inclua apenas 1 campo no where: WHERE nome like '%$pesquisa%' order by cod, ou se for usar os 2 para a mesma busca: WHERE razao like '%$pesquisa%' or nome like '%$pesquisa%' order by cod. Já na ordenação... bom... já que é um texto composto com separador e tudo mais, você pode usar o MID com INSTR para pegar um trecho inicial até o primeiro separador fazendo um CAST para numérico, daí ordena por ele. ehe Ex: CAST(MID(cod,1,INSTR(cod,'-')-1) AS UNSIGNED) AS CODIGO Daí depois você vai fazer order by pelo CODIGO. Pode ser que tenham métodos melhores de se fazer isto, mas só conheço deste jeito. att. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 1, 2008 Fiz assim SELECT * FROM devedores WHERE razao or nome like '%$identifica%' order by CAST(MID(cod,1,INSTR(cod,'-')-1) AS UNSIGNED) AS CODIGOesse: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Program Files\Apache Group\Apache2\htdocs\php\creditarassessoria.com.br\filiais\pesq_devedores_conteudo.php on line 11 ah! Se for usar só um campo, inclua apenas 1 campo no where: WHERE nome like '%$pesquisa%' order by cod, ou se for usar os 2 para a mesma busca: WHERE razao like '%$pesquisa%' or nome like '%$pesquisa%' order by cod.eu ja tinha tentado isso antes e deu no meso.veja la em cima: tb tentei SELECT * FROM devedores WHERE razao like '%$pesquisa%' or nome like '%$pesquisa%' order by codO que fazer? Compartilhar este post Link para o post Compartilhar em outros sites
cassitos 2 Denunciar post Postado Julho 1, 2008 :mellow: ham... bom... é o seguinte... dá uma lida com calma no que eu te passei ali em cima. 1 - hummm acho não entendi então o problema que está tendo com o where dos 2 campos. :P 2 - o código que te passei CAST(MID(cod,1,INSTR(cod,'-')-1) AS UNSIGNED) AS CODIGO na verdade era p/ ser utilizado no SELECT. ex: SELECT CAST(MID(cod,1,INSTR(cod,'-')-1) AS UNSIGNED) AS CODIGO, devedores.* FROM devedores WHERE .................... ORDER BY CODIGO. Não sei se pode fazer isto: SELECT * FROM devedores WHERE ......................... ORDER BY CAST(MID(cod,1,INSTR(cod,'-')-1) AS UNSIGNED)Se não me engano pode, faz uma tentativa colocando o código do CAST direto no order by como no exemplo acima. Detalhe: estou utilizando a versão 5.0.45 do MySql. Compartilhar este post Link para o post Compartilhar em outros sites
cassitos 2 Denunciar post Postado Julho 1, 2008 tb tentei SELECT * FROM devedores WHERE razao like '%$pesquisa%' or nome like '%$pesquisa%' order by codO que fazer?hummm... bom, então não entendi o problema que está tendo. ehe Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 1, 2008 Ta tudo o que eu preciso é o seguinte: O script faz uma busca na tabela de devedores e retorna todos os resultados onde o campo rasao seja igual ao valor que vem do php atraves da variavel $pesquiza. caso não haja resultado na coluna rasao ele busca na coluna nome e mostra os resultados. Isso tudo ordenado por código do devedor que não é auto incremeto e nem, numero, é varchar(10) e é preenchido por tipo 01-33, onde 01 é o código da empresa e 33 é o código(escolhido) do devedor. Compartilhar este post Link para o post Compartilhar em outros sites
cassitos 2 Denunciar post Postado Julho 1, 2008 order pelo código do devedor (após o traço) SELECT * FROM devedores ORDER BY CAST(MID(cod,INSTR(cod,'-')+1,LENGTH(cod)) AS UNSIGNED) a questão da pesquisa vou fazer uns testes aqui p/ ver o que pode ser.pode dar um exemplo real de uma situação que 'parou' de buscar (como você mencionou no primeiro post)? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 1, 2008 Veja como esta retornando: Resultado da Busca Id Nome / Fantasia (Razão) CPF/CNPJ Empresa Alterar Exluir Lançamentos CLINICA ESTETICA NATURALLES 202.020.202-02 03 06 05-01 ROBSON ANTONIO RODRIGUES SIMÃO 383.006.056-49 05 03-01 ROSEMARY LIMA 000.000.000-00 03 01-01 LATIANO SA GLÓRIA LTDA 542.222.222-22 01 03-01 ROSEMARY LIMA 999.999.999-12 03 09-01 RENATO MACHADO DE CARVALHO 318.888.010-30 09 05-02 LUIZ CARLOS CARNEIRO ALVES 037.372.476-41 05 03-02 GERALDO QUERINO SILVA 020.202.022-02 03 09-02 LUIZ CEZAR LIMA TEIXEIRA 527.608.047-04 09 01-03 KARLA MICHELLE RIBAS MARCOLONGO 222.222.222-22 05-03 FERNANDO THEODORO MARTINS PEIXOTO 010.668.596-12 05 02-03 CLAUDIA MARIA BUENO GONÇALVES 042.921.006-08 02 03-03 MANOEL JOSE PAULO SILVA 111.111.111-11 03 06-03 ALEXANDRE PEREIRA FERES 514.121.016-20 06Não esta ordenando certo não tipo 01-01, 05-03 ... Sobre o exemplo é o seguinte : Ele busca por rasao, se não achar nada, ele não continua a pesquisar pelo nome. O caso é que aluns dvedores são Empresas (rasao soical) e outros, pessoa fisica(nome) porisso o like rasao like nome. Compartilhar este post Link para o post Compartilhar em outros sites
cassitos 2 Denunciar post Postado Julho 1, 2008 huuuuuuuuuuuummmmmmmmmmmmmmmmmmm agora entendi sua ordenação cara. quando vi teu exemplo achei que estava querendo ordenar só pelo primeiro código, daí você explicou e achei que fosse só pelo segundo. então é pelo primeiro depois o segundo. SELECT devedores.* FROM devedores ORDER BY CAST(MID(cod,1,INSTR(cod,'-')-1) AS UNSIGNED), CAST(MID(cod,INSTR(cod,'-')+1,LENGTH(cod)) AS UNSIGNED) Vai ordenar numericamente o primeiro codigo, depois o segundo. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 1, 2008 Olha o que saiu agoira: Devedor: | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Próxima Resultado da Busca Id Nome / Fantasia (Razão) CPF/CNPJ Empresa Alterar Exluir Lançamentos CLINICA ESTETICA NATURALLES 202.020.202-02 03 06 22 IVONALDO DE SOUZA ALVES 012.433.376-13 02 0612 VANDERNELIO FERREIRA DE ARAUJO 304.421.718-03 09 0801 ADALBERTO LOPES CORREA 037.789.236-09 08 0802 ADELLY CRISTINE FIGUEREDO SANTOS 033.124.606-62 08 0803 ADRIANA FERNANDES DOS SANTOS 081.614.286-62 08 0804 ADRIANA TITO DA COSTA 078.485.746-60 08 0805 ADRIANO AFONSO DE OLIVEIRA 082.127.226-86 08 0806 ADRIANA DA SILVA OLIVEIRA 041.136.066-56 08 0807 ALEXANDRA DE SOUZA E SILVA 058.038.086-60 08 0808 ALEXSANDRO VIEIRA DA SILVA 035.344.066-30 08 0809 ANA BEATRIZ SALVIATO FREITAS 102.302.266-47 08 0810 ANA CLAUDIA JANUARIO 064.882.096-39 08 0811 ANA LUCIA DE PAULA 048.958.976-64 08 Parece que deu certo. Então agora o meu problema maior é o caso de buscar por rasao ou nome Compartilhar este post Link para o post Compartilhar em outros sites
cassitos 2 Denunciar post Postado Julho 1, 2008 pois é... o pior que não vejo outro modo a não ser pelo que você já tentou: SELECT * FROM devedores WHERE razao like '%$pesquisa%' or nome like '%$pesquisa%'faz o seguinte: não conheço PHP, mas tem um comando que 'escreve' na página, tenta colar aqui o SQL que está sendo executado (já com o texto a ser pesquisado, etc).E depois diz os nomes que deveriam aparecer e não estão. vai ficar melhor de analisar. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 1, 2008 Eis oi código todo(sem as devidas alterações): Trata-se de um form html para pesquiza de devedores com um filtro <script src="../global/sistema.js" type="text/javascript"></script> <form name="form1" method="post" action="?acao=listar"> Devedor: <input type="text" name="identifica"> <input type="submit" class="button" value="Pesquizar"> </form> <?php if ($acao == "listar"){ $Resultado = mysql_query("SELECT * FROM devedores WHERE razao or nome like '%$identifica%' order by cod"); $conta = mysql_num_rows($Resultado); $lpp = 15; // Especifique quantos resultados você quer por página $paginas = ceil($conta / $lpp); // Retorna o total de páginas if(!isset($pagina)) { $pagina = 0; } // Especifica uma valor para variavel pagina caso a mesma não esteja setada if($pagina > 0) { $menos = $pagina - 1; $url = "$PHP_SELF?acao=listar&identifica=$identifica&pagina=$menos&id_cliente=$id_cliente&nome_cliente=$nome_cliente$rasao_cliente&nome_devedor=$nome$rasao"; echo "<a href=".$url.">Anterior</a>"; // Vai para a página anterior } for($i=0;$i<$paginas;$i++) { // Gera um loop com o link para as páginas $url = "$PHP_SELF?acao=listar&identifica=$identifica&pagina=$i&id_cliente=$id_cliente&nome_cliente=$nome_cliente$rasao_cliente&nome_devedor=$nome$rasao"; echo " | <a href=".$url.">$i</a>"; } if($pagina < ($paginas - 1)) { $mais = $pagina + 1; $url = "$PHP_SELF?acao=listar&identifica=$identifica&pagina=$mais&id_cliente=$id_cliente&nome_cliente=$nome_cliente$rasao_cliente&nome_devedor=$nome$rasao"; echo " | <a href=".$url.">Próxima</a>"; } $inicio = $pagina * $lpp; // Retorna qual será a primeira linha a ser mostrada no MySQL $Resultado = mysql_query("SELECT * FROM devedores WHERE razao or nome like '%$identifica%' order by cod LIMIT $inicio, $lpp"); if ($conta == 0) { echo "Não há devedores cadastrados com essa pesquisa - $identifica";} else { ?> <h2>Resultado da Busca </h2> <table> <tr> <td width="30">Id</td> <td width="300">Nome / Fantasia (Razão)</td> <td width="150">CPF/CNPJ</td> <td width="30">Empresa</td> <td align="center" width="100">Alterar</td> <td align="center" width="100">Exluir</td> <td align="center" width="100">Lançamentos</td> </tr> <?php while(list($id, $cod, $pessoa, $fantasia, $rasao, $cnpj, $ie, $nome, $cpf, $rg, $pai, $paicpf, $mae, $maecpf, $trabalho, $telp, $teltrabalho, $endereco,$numero, $complemento, $bairro, $cidade, $uf, $cep, $email, $potencial, $cliente, $filial, $baixa) = mysql_fetch_row($Resultado)) { $dados_cliente = mysql_query("SELECT * FROM clientes WHERE id='$cliente'"); list($id_cliente, $cod_cliente, $pessoa_cliente, $fantasia_cliente, $nome_cliente, $rasao_cliente) = mysql_fetch_row($dados_cliente); ?> <tr> <td><?=$cod; ?></td> <td><?=$nome; ?><?=$rasao; ?></td> <td align="right"><?=$cpf; ?><?=$cnpj; ?></td> <td align="center"><?=$cod_cliente; ?></td> <td align="center"><a href="cad_devedores.php?acao=editar&id=<?=$id; ?>&id_cliente=<?=$id_cliente; ?>"><img src="../imagens/site/edit.gif" alt="Modificar" border="0" hspace="5" /></a></td> <? if ($baixa=="S"){ $baixa = "N"; $icone = "<img border=0 src=../imagens/site/desbloquear.ico>"; } else { $baixa = "S"; $icone = "<img border=0 src=../imagens/site/bloquear.gif>"; } ?> <script language="javascript"> <!-- function verifica() { var Msg = "Deseja alterar a condição de bloqueio do usuário?"; return confirm(Msg); } //--> </script> <td align="center"><a href="pesq_devedores.php?acao=baixar&id=<?=$id; ?>&baixa=<?=$baixa; ?>&id_cliente=<?=$id_cliente;?>&nome_cliente=<?=$nome_cliente;?><?=$rasao_cliente;?>" onclick='return verifica()'><?=$icone; ?></a></td> <td align="center"><a href="cad_lanca_devedores.php?id_devedor=<?=$id; ?>&id_cliente=<?=$id_cliente;?>&nome_cliente=<?=$nome_cliente;?><?=$rasao_cliente;?>&nome_devedor=<?=$nome?><?=$rasao?>"><img src="../imagens/site/edit.gif" alt="Lançamentos" border="0" hspace="5" /></a></td> </tr> <? }} ?> </table> <br /><br /> <? } ?> <?php // Inicio do bloueio do usuário if ($acao == "baixar"){ $result = mysql_query ("UPDATE devedores SET baixa='$baixa' WHERE id='$id' "); if($result){ echo "<script>document.location='pesq_devedores.php?baixa=$baixa'</script>"; } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Julho 1, 2008 1- Seu cliente come um sacão de feno no almoço 2- Select * from taba ORDER BY SUBSTRING_INDEX(campo_mal_feito,'-',1)+0 ASC (ordena pela empresa) Select * from taba ORDER BY SUBSTRING_INDEX(campo_mal_feito,'-',-1)+0 ASC (ordena pelo codigo do devedor) Compartilhar este post Link para o post Compartilhar em outros sites