Sequencia De Numeros
#1
Posted 14/12/2006, 19:18
Estou tentando inserir no banco de dados um numero em sequencia como se fosse id, só que ele tem que ler o numero da linha anterior e colocar o proximo em seguencia.
Tentei fazer isso com o id primary key e auto increment só que quando apago um registro, ele salta alguns números e não fica na sequência correta.
Desde já agradeço,
Raphael Melo
#2
Posted 14/12/2006, 21:54
#3
Posted 14/12/2006, 22:57
Qual o problema não ficar na sequência correta? Sua aplicação será afetada por isso?Tentei fazer isso com o id primary key e auto increment só que quando apago um registro, ele salta alguns números e não fica na sequência correta.
Identificadores são feitos para serem únicos. Não importa se o registro foi modificado ou apagado, um dia ele existiu, e você sempre terá conhecimento disto por esta razão. A partir do momento que identificadores mudam, não há razão em utilizá-los.
[]s Até mais
#4
Posted 15/12/2006, 07:35
<?php function max(){ conexao(); $q = "SELECT MAX(campo) AS max FROM tabela;"; $r = mysql_query($q); $reg = mysql_fetch_array($r); $max = (int) $reg['max']; if(!$max) $max = 1; return $max; } function inserir_novo_registro($sequencia, $valor){ conexao(); $sequencia++; $q = "INSERT INTO tabela SET campo_id = '{$sequencia}', campo = '{$valor}';"; mysql_query($q); } while($i < 10){ inserir_novo_registro(max(), $i); $i++; } ?>
Veja se pode lhe ajudar
[]s
-------------------------------------------------------------------------------------
http://www.desenvolvendosites.com
#5
Posted 15/12/2006, 09:01
Afinal, identificador é uma coisa, posição, que é o que você quer é outra. Agora apenas repense se esta informação é realmente necessária para sua aplicação.
Tutoriais, código colaborativo (pastebin), curso de PHP, artigos e etc.
#6
Posted 15/12/2006, 12:53
Qual o problema não ficar na sequência correta? Sua aplicação será afetada por isso?
sim fica afetada pois esse numero seria o numero de inscrição que eu jogo na busca. tem que ficar na sequencia correta sem pular nenhum numero.
<?php function max(){ conexao(); $q = "SELECT MAX(campo) AS max FROM tabela;"; $r = mysql_query($q); $reg = mysql_fetch_array($r); $max = (int) $reg['max']; if(!$max) $max = 1; return $max; } function inserir_novo_registro($sequencia, $valor){ conexao(); $sequencia++; $q = "INSERT INTO tabela SET campo_id = '{$sequencia}', campo = '{$valor}';"; mysql_query($q); } while($i < 10){ inserir_novo_registro(max(), $i); $i++; } ?>
Veja se pode lhe ajudar
[]s
tentei colocar assim
<?php include("config.php"); mysql_connect ("$host", "$usuariodb", "$senhadb") or die ('Não foi possivel conectar com o usuario: ' . mysql_error()); mysql_select_db ("$db") or die("não foi possivel"); function max(){ conexao(); $q = "SELECT MAX(id) AS max FROM cadastros;"; $r = mysql_query($q); $reg = mysql_fetch_array($r); $max = (int) $reg['max']; if(!$max) $max = 1; return $max; } function inserir_novo_registro($sequencia, $valor){ conexao(); $sequencia++; $q = "INSERT INTO cadastros SET id = '{$sequencia}', campo = '{$valor}';"; mysql_query($q); } while($i < 10){ inserir_novo_registro(max(), $i); $i++;} ?>
mas dá esse erro aqui Fatal error: Cannot redeclare max() in /home/remote/ftp_cesg/public_html/inscricao/soma.php on line 6
Edição feita por: raphaelmelo, 15/12/2006, 12:55.
#7
Posted 15/12/2006, 13:22
$q = "SELECT MAX(id) AS max FROM cadastros;";
mara
$q = "SELECT MAX(id) AS maximo FROM cadastros;";
"Cannot redeclare max" - Não é possível receclarar max...
té mais
Edição feita por: MarkApollo, 15/12/2006, 13:23.
Como ressucitar seu windows(Registro Corrompido)
Dactyli Informática
Grid Master-Detail em php
Projeto C#.NET
#8
Posted 15/12/2006, 13:55
ele não está lendo a linha anterior está apenas inserindo um novo registro = 1
o que é?
<? include("config.php"); mysql_connect ("$host", "$usuariodb", "$senhadb") or die ('Não foi possivel conectar com o usuario: ' . mysql_error()); mysql_select_db ("$db") or die("não foi possivel"); $sel = mysql_query ("SELECT posicao FROM cadastros"); if ($sel){ $sequencia++; mysql_query ("INSERT INTO cadastros SET posicao='$sequencia'"); echo "posição inserida com sucesso"; } else { echo "não foi possivel"; }; ?>
valew
Edição feita por: raphaelmelo, 15/12/2006, 14:26.
#9
Posted 17/12/2006, 18:56
Se você fizer, verificará que isso não retorna o valor do campo "posicao" e sim um Resourcd id #xx que indica o resultado da query que você executou.
A sua verificação do if() trata esseretorno como booleano, ou seja, só não vai vai entrar nesse if() se ocorrer algum erro de execução da query ( erro de sintaxe, por exemplo) que aí sim, retorna false.
Você deverá tratar esse retorno ($sel) com um fetch_array para pegar o valor do campo e aí sim, verificar seu conteúdo.
E o erro que deu pra você "cannot redeclare max()" é porque o nome de sua função (max) não pode ser assim.
Existe uma função do php com esse mesmo nome, e por isso dá erro.
Mude o nome da mesma e ve se adianta em algo aí...
Uma sugestão:
Não sei se o mysql permite execuções de subquerys (uso postgre e o mesmo permite) então, no seu caso eu usaria assim:
INSERT INTO cadastro (nome, posicao) VALUES ('nome do cara', (SELECT MAX(posicao) FROM cadastro)+1)
Qualquer coisa falaeee...
#10
Posted 18/12/2006, 13:41
raphael, você já experimentou dar "echo $sel" após a execução da query?
Se você fizer, verificará que isso não retorna o valor do campo "posicao" e sim um Resourcd id #xx que indica o resultado da query que você executou.
A sua verificação do if() trata esseretorno como booleano, ou seja, só não vai vai entrar nesse if() se ocorrer algum erro de execução da query ( erro de sintaxe, por exemplo) que aí sim, retorna false.
Você deverá tratar esse retorno ($sel) com um fetch_array para pegar o valor do campo e aí sim, verificar seu conteúdo.
E o erro que deu pra você "cannot redeclare max()" é porque o nome de sua função (max) não pode ser assim.
Existe uma função do php com esse mesmo nome, e por isso dá erro.
Mude o nome da mesma e ve se adianta em algo aí...
Uma sugestão:
Não sei se o mysql permite execuções de subquerys (uso postgre e o mesmo permite) então, no seu caso eu usaria assim:
INSERT INTO cadastro (nome, posicao) VALUES ('nome do cara', (SELECT MAX(posicao) FROM cadastro)+1)
Qualquer coisa falaeee...
valew Celão mas já consegui, usei o mysql_fetch_assoc para ler a linha anterior...
aqui está o código para quem precisar...
<? include("config.php"); mysql_connect ("$host", "$usuariodb", "$senhadb") or die ('Não foi possivel conectar com o usuario: ' . mysql_error()); mysql_select_db ("$db") or die("não foi possivel"); $sel = mysql_query ("SELECT * FROM cadastros"); $sell = mysql_fetch_assoc($sel); $posicao = $sell["posicao"]; //O Objetivo é que a nova linha seja a coluna considerada primaria. $nid = $posicao + 1; $sql = "INSERT INTO cadastros (posicao) VALUES ('$nid')"; mysql_query($sql); echo "ok"; ?>
0 user(s) are reading this topic
0 membro(s), 0 visitante(s) e 0 membros anônimo(s)