Listagem por ID em ordem crescente !!

21/03/2024

0

PHP

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:

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

Legendary003

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.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar