Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

string to number

Recommended Posts

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 cod
tb 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
22
E 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

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

Fiz assim

SELECT * FROM devedores WHERE razao or nome like '%$identifica%' order by CAST(MID(cod,1,INSTR(cod,'-')-1) AS UNSIGNED) AS CODIGO
esse:

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 cod
O que fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

: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

tb tentei
SELECT * FROM devedores WHERE razao like '%$pesquisa%' or nome like '%$pesquisa%' order by cod
O 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

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

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

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 06
Nã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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.