Jump to content


Photo

Duvida Na Query.... Usando Left


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

#1 xulapa4fun

xulapa4fun

    Novato no fórum

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

Posted 07/02/2007, 12:14

ae galera!

tenho na tabela, um campo chamado numero ( varchar(14) ), e ele eh composto da seguinte forma:

ddmmaaaa-00000
(diamesano-numero com 5 digitos)

precizo fazer o seguinte:

fazer uma consulta nos 8 primeiros digitos (dia mes ano, ex: 01022007) pra isso fiz o seguinte:

$sql = mysql_query("SELECT *, LEFT(numero,8) as resumo FROM tabela ORDER BY numero ASC");

beleza! ele me da todos os registros... somente os 8 primeiros digitos !

A questão é a seguinte:


atravez de um form... com 2 campos de texo... vou especificar 2 sequencias de numeros, ex:
01022007 e 10022007

Com esses 2 numeros.. vou ter q buscar no campo numero da tabela todos os os registros que estao ENTRE esses 2 numeros, ou seja todos os numeros que forem:

>= 01022007 e 10022007 <=

mas vou ter q fazer essa busca apenas nos 8 primeiros digitos do campo numero !

como fazer isso ?????




outra duvida.. eh sobre o tipo do campo ( varchar(14) ) acho q n é o mais indicado para mecher com NUMEROS!
qual o melhor campo ? entre os numeros terá - (traço) ! INT aceita traços ??

Edição feita por: xulapa4fun, 07/02/2007, 12:16.


#2 Noturno

Noturno

    12 Horas

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

Posted 07/02/2007, 12:21

Se tiver traços não é int(inteiro).

faça assim

$sql = mysql_query("SELECT *, LEFT(numero,8) as resumo FROM tabela WHERE LEFT(numero,8) = $variavel ORDER BY numero ASC");

"Não há maior demonstração de insanidade do q fazer a mesma coisa, da mesma forma, dia após dia, e esperar resultados diferentes"
MCP .NET WebApplications C#
MCP SQL Server 2000
Desenvolvedor Delphi/PHP

#3 xulapa4fun

xulapa4fun

    Novato no fórum

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

Posted 07/02/2007, 12:29

uhhh pode cre! parece q funciono certinho !

como eu usaria o GROUP BY numero nessa consulta ? tentei aki.. pra n repetir os numeros... mas n funfo!


vlw cara!

#4 Betinho

Betinho

    Novato no fórum

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

Posted 07/02/2007, 14:25

Voce pode fazer:

SELECT *, LEFT(numero,8) as resumo 
FROM tabela having
resumo between 01022007 and 10022007
ORDER BY numero ASC

varchar absolutamente não é a melhor forma de trabalhar com dados numéricos, mas os dados da forma q vc está importando o melhor seria char(14). O hífen realmente é necessário?

Eu recomendaria a vc que separassee os dois campos, um do tipo date e outro do tipo integer, assim vc poderia colocar índices de forma a otimizar suas consultas.

Com relação ao GROUP BY, vc quer agrupar por data o quê?

Abraço




1 user(s) are reading this topic

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

IPB Skin By Virteq