Listagem por ID em ordem crescente !!
21/03/2024
0
Olá...
Estou tentando fazer o seguinte !!
Listando dados em tabela !!
Gostaria que....se na listagem houver 4 linhas...indepedente de seu número de ID, faça a listagem em ID ser em ordem 1 2 3 4 !!
Exemplo...se tiver uma listagem de dados que está em ID 1 3 3...faça ficar 1 2 3 !!
Segue a tentativa a seguir:
Estou tentando fazer o seguinte !!
Listando dados em tabela !!
Gostaria que....se na listagem houver 4 linhas...indepedente de seu número de ID, faça a listagem em ID ser em ordem 1 2 3 4 !!
Exemplo...se tiver uma listagem de dados que está em ID 1 3 3...faça ficar 1 2 3 !!
Segue a tentativa a seguir:
echo "<table class='tabela_dados' border='1'> <tr> <td>ID</td> <td>Nome Empresa</td> <td>Responsável</td> <td>Telefone 1</td> <td>Telefone 2</td> <td>E-mail 1</td> <td>E-mail 2</td> <td>Endereço</td> <td>CEP</td> <td>Bairro</td> <td>AÇÃO 1</td> <td>AÇÃO 2</td> </tr> "; $sql = "SELECT ID FROM usuarios_dados WHERE Usuario='$usuario'"; $result = $conn->query($sql); $num_rows = $result->num_rows; $Novo_ID = 1; for ($i = 0; $i < $num_rows; $i++) { $registro = $result -> fetch_row(); $sql2 = "UPDATE usuarios_dados SET ID='$Novo_ID' WHERE ID='$Novo_ID'"; $result2 = $conn->query($sql2); $Novo_ID++; } $sql = "SELECT * FROM usuarios_dados"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "<tr> <td>$row[ID]</td> <td>$row[Nome_Empresa]</td> <td>$row[Responsavel]</td> <td>$row[Telefone_1]</td> <td>$row[Telefone_2]</td> <td>$row[Email_1]</td> <td>$row[Email_2]</td> <td>$row[Endereço]</td> <td>$row[CEP]</td> <td>$row[Bairro]</td> <td> <form method='post' action='Editar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='EDITAR'> </form> </td> <td> <form method='post' action='Deletar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='DELETAR'> </form> </td> </tr> "; } } else { echo "0 results"; } $conn->close();
Legendary003
Curtir tópico
+ 0
Responder
Posts
22/03/2024
Arthur Heinrich
O que você está querendo fazer não é uma questão de PHP, mas sim de modelagem de banco de dados.
A situação "hipotética" em que 3 registros possuem os IDs 1, 3 e 3 nem deveria existir, devido a uma PK (primary key) na tabela.
Alterar o ID de um registro, embora possível, não é aconselhável, já que o ID é um identificador. Geralmente ele é usado para relacionar outras informações ao registro e, com a alteração, este relacionamento se perde.
Em bancos de dados relacionais, o conceito de constraint garante a integridade, impede registros duplicados ou relacionamentos órfãos, impedindo que a aplicação torne a base inconsistente.
No seu exemplo, a rotina tenta numerar de 1 a N os registros pertencentes a um usuário. Porém, se o ID é (ou deve ser) único, esta atualização vai gerar conflito com os IDs de outros usuários.
Talvez o que você precise seja apenas um número sequencial, que nada tem a ver com o ID, apenas para enumerar as linhas no resultado de um relatório, que pode ser gerado no momento de preparar a página, ao invés de retornar do banco. Mas, esta informação não teria muita utilidade para manipular a informação contida no banco de dados.
No seu exemplo, a query inicial retorna "SELECT ID FROM usuarios_dados WHERE Usuario='$usuario'"
Porém, no momento do update, temos "UPDATE usuarios_dados SET ID='$Novo_ID' WHERE ID='$Novo_ID'"
Este update não garante que o registro alterado seja do usuário selecionado anteriormente, alterando todos os registros que contiverem o mesmo ID.
Vamos a um exemplo: Supondo os registros 1, 3 e 3, como no seu exemplo:
Vamos pegar o primeiro "1" e trocar para "1", ficando com 1, 3, 3
Agora pegamos o segundo "3" e trocamos para "2", ficando com 1, 2 e 2
Em seguida, pegamos o terceiro "3" e trocamos para "3", o que não muda nada, já que não existe mais um registro com código "3", mantendo os registros 1, 2 e 2.
Poderia ser ainda pior se outro usuário possuísse algum registro com IDs 1 ou 3, que seriam atualizados juntamente com os do usuário em questão.
Para corrigir uma PK (suposta PK) que apresenta registros repetidos devido à ausência da constraint, é necessário diferenciar cada registro que compartilha de um mesmo ID e esse trabalho depende do banco utilizado.
No Oracle, podemos utilizar uma coluna fictícia, chamada ROWID, que identifica a posição física do registro.
No MS-SQL Server, embora exista algo parecido, o banco não acessa o registro diretamente. Então, a menos que dê para diferenciar os registros por outras colunas, a maneira de se fazer isso é setando a variável "set rowcount 1", que fará com que o update atualize só a primeira linha encontrada, deixando as demais intactas, para updates seguintes.
Ou seja, requer um trabalho cuidadoso, para dar a cada registro o seu devido ID.
A situação "hipotética" em que 3 registros possuem os IDs 1, 3 e 3 nem deveria existir, devido a uma PK (primary key) na tabela.
Alterar o ID de um registro, embora possível, não é aconselhável, já que o ID é um identificador. Geralmente ele é usado para relacionar outras informações ao registro e, com a alteração, este relacionamento se perde.
Em bancos de dados relacionais, o conceito de constraint garante a integridade, impede registros duplicados ou relacionamentos órfãos, impedindo que a aplicação torne a base inconsistente.
No seu exemplo, a rotina tenta numerar de 1 a N os registros pertencentes a um usuário. Porém, se o ID é (ou deve ser) único, esta atualização vai gerar conflito com os IDs de outros usuários.
Talvez o que você precise seja apenas um número sequencial, que nada tem a ver com o ID, apenas para enumerar as linhas no resultado de um relatório, que pode ser gerado no momento de preparar a página, ao invés de retornar do banco. Mas, esta informação não teria muita utilidade para manipular a informação contida no banco de dados.
No seu exemplo, a query inicial retorna "SELECT ID FROM usuarios_dados WHERE Usuario='$usuario'"
Porém, no momento do update, temos "UPDATE usuarios_dados SET ID='$Novo_ID' WHERE ID='$Novo_ID'"
Este update não garante que o registro alterado seja do usuário selecionado anteriormente, alterando todos os registros que contiverem o mesmo ID.
Vamos a um exemplo: Supondo os registros 1, 3 e 3, como no seu exemplo:
Vamos pegar o primeiro "1" e trocar para "1", ficando com 1, 3, 3
Agora pegamos o segundo "3" e trocamos para "2", ficando com 1, 2 e 2
Em seguida, pegamos o terceiro "3" e trocamos para "3", o que não muda nada, já que não existe mais um registro com código "3", mantendo os registros 1, 2 e 2.
Poderia ser ainda pior se outro usuário possuísse algum registro com IDs 1 ou 3, que seriam atualizados juntamente com os do usuário em questão.
Para corrigir uma PK (suposta PK) que apresenta registros repetidos devido à ausência da constraint, é necessário diferenciar cada registro que compartilha de um mesmo ID e esse trabalho depende do banco utilizado.
No Oracle, podemos utilizar uma coluna fictícia, chamada ROWID, que identifica a posição física do registro.
No MS-SQL Server, embora exista algo parecido, o banco não acessa o registro diretamente. Então, a menos que dê para diferenciar os registros por outras colunas, a maneira de se fazer isso é setando a variável "set rowcount 1", que fará com que o update atualize só a primeira linha encontrada, deixando as demais intactas, para updates seguintes.
Ou seja, requer um trabalho cuidadoso, para dar a cada registro o seu devido ID.
Responder
Clique aqui para fazer login e interagir na Comunidade :)