Jump to content


Photo

Mysql


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

#1 Marcio_Trindade

Marcio_Trindade

    Normal

  • Usuários
  • 108 posts
  • Sexo:Não informado
  • Interesses:Ajudar e ser ajudado

Posted 30/09/2004, 17:42

Tem como saber qual será o proximo número de um campo autoincrement?

eu to querendo montar uma tabela aqui que um campo vai precisar ter o numero do campo autoincremente desta mesma tabela.

Como faço isso no php?

#2 magnum

magnum

    Eu chego lá! (12h)

  • Usuários
  • 271 posts
  • Sexo:Não informado
  • Localidade:Campina Grande - PB

Posted 30/09/2004, 18:05

Se o seu campo incremento for id por exemplo, vc faz:

select max(id) from tabela

ele retornará o maior numero do campo auto incremento o próximo é só fazer + 1
Álvaro Magnum Barbosa Neto
WAM WebMedia
magnum@wamwebmedia.com.br

#3 Prog

Prog

    ...

  • Ex-Admins
  • 3761 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro/RJ
  • Interesses:TI, Software Livre, Design Digital e Rock'n'Roll.

Posted 30/09/2004, 18:07

Melhor fazer desta forma, o post anterior não é 100%:

SELECT (LAST_INSERT_ID()+1) AS proximo_id FROM tabela LIMIT 1
------
Mero mortal!

#4 magnum

magnum

    Eu chego lá! (12h)

  • Usuários
  • 271 posts
  • Sexo:Não informado
  • Localidade:Campina Grande - PB

Posted 30/09/2004, 18:18

esse limit 1 quer dizer o que?
Álvaro Magnum Barbosa Neto
WAM WebMedia
magnum@wamwebmedia.com.br

#5 Prog

Prog

    ...

  • Ex-Admins
  • 3761 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro/RJ
  • Interesses:TI, Software Livre, Design Digital e Rock'n'Roll.

Posted 30/09/2004, 18:21

O LIMIT, como o próprio nome já diz, serve para limitar a quantidade de resultados, neste caso, ele vai limitar o resultado a 1 unico registo, mesmo que retorne outros valores. O LIMIT também é utilizado para pegar intervalos, muito utilizado em paginação.
------
Mero mortal!

#6 magnum

magnum

    Eu chego lá! (12h)

  • Usuários
  • 271 posts
  • Sexo:Não informado
  • Localidade:Campina Grande - PB

Posted 30/09/2004, 18:22

Mas neste caso isso é realmente necessário? Já que o last_insert só vai pegar o último. Acho q a minha solução é mais clara
Álvaro Magnum Barbosa Neto
WAM WebMedia
magnum@wamwebmedia.com.br

#7 Prog

Prog

    ...

  • Ex-Admins
  • 3761 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro/RJ
  • Interesses:TI, Software Livre, Design Digital e Rock'n'Roll.

Posted 30/09/2004, 18:34

O LAST_INSERT vai trazer alguns registros, ele pode trazer 1, mas tb pode trazer mais de 1... por isto a presença do LAST.

Demostrando algumas falhas possiveis:

COMANDO 1
SELECT (MAX(id)+1) AS proximo_id FROM tabela

COMANDO 2
SELECT (LAST_INSERT_ID()+1) AS proximo_id FROM tabela LIMIT 1


CREATE TABLE tabela (
   id INT (3) UNSIGNED DEFAULT '0' AUTO_INCREMENT, 
   nome VARCHAR (50), 
   PRIMARY KEY(id)
)

INSERT tabela (nome) VALUES ('Joao')
INSERT tabela (nome) VALUES ('Maria')
INSERT tabela (nome) VALUES ('Jose')

// neste momento estamos no ID 3
// Executando COMANDO 1, retorna 4
// Execurando COMANDO 2, retorna 4

DELETE FROM tabela WHERE id=2

// neste momento continuamos no ID 3
// Executando COMANDO 1, retorna 4
// Execurando COMANDO 2, retorna 4

DELETE FROM tabela WHERE id=3

// neste momento continuamos no ID 3
// Executando COMANDO 1, retorna 2
// Execurando COMANDO 2, retorna 4

INSERT tabela (nome) VALUES ('Felipe')
INSERT tabela (nome) VALUES ('Ana')

// neste momento estamos no ID 5
// Executando COMANDO 1, retorna 6
// Execurando COMANDO 2, retorna 6

DELETE FROM tabela WHERE id in (4,5)

// neste momento continuamos no ID 5
// Executando COMANDO 1, retorna 2
// Execurando COMANDO 2, retorna 6

DELETE FROM tabela //(apagando todos os registros)

// neste momento continuamos no ID 5
// Executando COMANDO 1, retorna ???
// Execurando COMANDO 2, retorna 6

ps.: Pode ser que eu tenha cometido algum equivoco com os numeros no exemplo anterior, mas a idéia e o resultado são verdadeiros.

obs.: Verifiquei que, nos testes, é necessário que exista, pelo menos, 1 registro na tabela para que a solução faça efeito, se estiver zerada, ele tras resultado nulo. Sendo assim, o último exemplo não funciona como esperado, quando são apagados todos os registros da tabela.


Edição feita por: Prog, 30/09/2004, 18:42.

------
Mero mortal!

#8 Marcio_Trindade

Marcio_Trindade

    Normal

  • Usuários
  • 108 posts
  • Sexo:Não informado
  • Interesses:Ajudar e ser ajudado

Posted 30/09/2004, 19:28

Prog

Muito obrigado mesmo cara eu tava atras disso faz um tempão cara
:)
Valeu mesmo

e magnum eu tava usando este seu método porém quando eu deletava o último campo da tabela ele pegava o numero do campo q foi apagado e não do proximo id que teriamos.

:)

Muito obrigado!

#9 magnum

magnum

    Eu chego lá! (12h)

  • Usuários
  • 271 posts
  • Sexo:Não informado
  • Localidade:Campina Grande - PB

Posted 30/09/2004, 19:31

pois é hehehe, prog é o mestre mesmo. De qualquer maneira a gente aprendeu :P
Álvaro Magnum Barbosa Neto
WAM WebMedia
magnum@wamwebmedia.com.br

#10 Marcio_Trindade

Marcio_Trindade

    Normal

  • Usuários
  • 108 posts
  • Sexo:Não informado
  • Interesses:Ajudar e ser ajudado

Posted 30/09/2004, 19:58

Opa prog tive um problema aqui!!!

Agora como eu faço pra pegar o resultado desta consulta?

$sql="SELECT (LAST_INSERT_ID()+1) AS proximo_id FROM tabela LIMIT 1";
$query=mysql_query($sql);

eu normalmente uso mysql_fetch_array pra pegar resultados mas neste caso eu não sei como pegar pois não tem o nome do campo e eu não aprendi ainda este tal de AS no select.


Valeu a ajuda ai

#11 magnum

magnum

    Eu chego lá! (12h)

  • Usuários
  • 271 posts
  • Sexo:Não informado
  • Localidade:Campina Grande - PB

Posted 30/09/2004, 20:03

este as "cria" um campo virtual na tabela, pode fazer normalmente o mysql_fetch_array e usar proximo_id como nome do campo.
Álvaro Magnum Barbosa Neto
WAM WebMedia
magnum@wamwebmedia.com.br

#12 Marcio_Trindade

Marcio_Trindade

    Normal

  • Usuários
  • 108 posts
  • Sexo:Não informado
  • Interesses:Ajudar e ser ajudado

Posted 30/09/2004, 20:18

este as "cria" um campo virtual na tabela, pode fazer normalmente o mysql_fetch_array e usar proximo_id como nome do campo.


Ae Valeu mesmo magnum e desculpa ai eu so meio cabaço mas to estudando pacas eu não encontrava essa porcaria no manual do mysql agora com a ajuda de vocês vo continua mandando bala nos estudos!!!

Valeu se precisar tamos ai!!!

#13 magnum

magnum

    Eu chego lá! (12h)

  • Usuários
  • 271 posts
  • Sexo:Não informado
  • Localidade:Campina Grande - PB

Posted 30/09/2004, 20:21

valeu cara (y)
Álvaro Magnum Barbosa Neto
WAM WebMedia
magnum@wamwebmedia.com.br

#14 andrearruda

andrearruda

    12 Horas

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

Posted 16/02/2005, 22:49

$sql="SELECT (LAST_INSERT_ID(codigo)+1) AS proximo_id FROM tabela ORDER BY codigo";
$query=mysql_query($sql);

isso estaria correto????

Edição feita por: andrearruda, 16/02/2005, 22:57.

//---------------------
Em casa de Saci, calça da pra dois!!!
//---------------------

#15 H3NR!QU3

H3NR!QU3

    Progamador PHP!

  • Usuários
  • 1032 posts
  • Sexo:Não informado
  • Localidade:cuiaba MT
  • Interesses:programação... PHP,JAVA,C++ ,c,c# asp, asp.net e delph

Posted 16/02/2005, 22:57

hehehe não adianta brigar com o prog sobre essas parada de banco de dados kra... ele jah muito esperiente em banco de dados...hehe quando ele fala ele sempr etem razão...

assim tbem da

<?
$sql = mysql_query("select from tabela order by id desc limit 1");
while($campo = mysql_fetch_array($sql)){
$total = $campo[id]+1;
echo"o proximo id auto incrementado e ".$total."";
}
?>


é uma forma simples mais funcional e d efacil intendimento... (y)




1 user(s) are reading this topic

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

IPB Skin By Virteq