Ir para conteúdo

POWERED BY:

Arquivado

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

Luciano Silveira Marco

Renumerar coluna

Recommended Posts

Olá pessoal,

 

Tenho uma coluna chamada "npergunta" que faço numeração manualmente, acontece que quando apago por exemplo a linha correspondente ao numero 2 ou 3 por exemplo gostaria que a numeração fosse reiniciada, achei este exemplo na net, testei e não funcionou no script php, alguém pode me informar se isto funciona?

 

$ccount = 0;
$stmt = $conn->prepare("UPDATE horus005 SET npergunta = $ccount:= $ccount + 1 WHERE codigopes=:vcodpes;");
$stmt->bindValue(':vcodpes', trim($vcodpesq), PDO::PARAM_STR);
$stmt->execute();
$affected_rows = $stmt->rowCount();
echo "registros alterados ".$affected_rows;
Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado, vou tentar sem os dois pontos, apesar que tenho instruções em PHP que estão funcionando com :=

Impossível. Dá erro de sintaxe. Veja

 

php > $x := 1;
PHP Parse error:  syntax error, unexpected ':' in php shell code on line 1

Parse error: syntax error, unexpected ':' in php shell code on line 1

sobre o que você mencionou a atribuição fora da query eu não compreendi.

Assim:

 

$ccount = $ccount + 1;
$stmt = $conn->prepare("UPDATE horus005 SET npergunta = :count WHERE codigopes=:vcodpes;");

Depois é só fazer o bindValue/bindParam de :count com o valor de $count

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah bom, não havia entendi, sim sim, uso dentro das instruções sql e não fora rsrsrs, erro comunicação...vou testar sua dica e depois respondo, mas agradeço muito sua atenção.


Olá,

 

Ele executa a instrução sem erros agora, mas não faz alterações nenhuma na numeração da coluna.

 

$ccount = 0;
$ccount = $ccount + 1;
$stmt = $conn->prepare("UPDATE horus005 SET npergunta = :vcount WHERE codigopes=:vcodpes;");
$stmt->bindValue(':vcount',$ccount,PDO::PARAM_INT);
$stmt->execute();
$affected_rows = $stmt->rowCount();
echo "registros alterados ".$affected_rows;

Compartilhar este post


Link para o post
Compartilhar em outros sites

faltou o bindValue de :vcodpes

Provavelmente execute() retornou false, devido a esse erro de sintaxe

 

Mas dessa forma seu código vai atribuir sempre o valor 1 (pois $count é 0 e está atribuindo o valro de $count +1). É isso mesmo que quer? Talvez você queira incrementar em uma unidade o valor de npergunta. Se for isso, faça uma sql assim:

 

 

UPDATE horus005 SET npergunta = npergunta + 1 WHERE <condicao>;

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi Roberto, desculpe, o bindValue de :vcodpes eu havia esquecido de colar aqui, mas no código estava correto, mas como mencionei não dá erro de sintaxe porém não faz nenhuma alteração no banco, tentei desta última forma que você sugeriu e também ainda não faz, o que eu preciso é que faça incremental 1, 2, 3, 4, 5. Utilizei a forma de coluna autoincremental e funcionou, o problema é que quando eu apago um registro eu não consigo mais reordenar e por isso gostaria fazer funcionar desta forma manual. O código está assim agora:

 

$stmt = $conn->prepare("UPDATE horus005 SET npergunta = +1 WHERE codigopes=:vcodpes;");
$stmt->bindValue(':vcodpes', trim($vcodpesq), PDO::PARAM_STR);
$stmt->execute();
$affected_rows = $stmt->rowCount();
echo "registros alterados ".$affected_rows;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas o correto é usar um campo auto increment. Esse número é o identificador do registro. Não deve ser alterado.

 

Qual é o problema de haver IDs inexistentes, após um DELETE? Isso é normal.

 

Você quer resolver um "problema", mas pode gerar outros. Veja: se houver 1000 registros, todos numerados de 1 a 1000, ao apagar o registro 9, você precisará renumerado o 10 para 9, o 11 para 10 e assim sucessivamente. Isso tomará muito tempo e, pior, poderá haver um novo INSERT ou DELETE nesse intervalo de tempo, que vai gerar outra cadeia de UPDATE, que poderá criar conflitos de numeração.

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.