Reordenar posição de dados por ID

Artigos comentados e explicados sobre MySQL

Moderador: web

responder a dúvida

Reordenar posição de dados por ID

Mensagem por web Offline » Sáb Jul 25, 2009 10:51 pm

Depois de muito estudo, estou postando aqui um script que montei para reordenar os dados de uma tabela.

A idéia do script é a seguinte:

Eu tenho o seguinte

id - info
1 - a
2 - b
3 - c

Eu quero ter links para subir o posicionamento das linhas, por exemplo

1 - a
2 - b | SOBE
3 - c | SOBE

Ou seja, se eu clicar em SOBE no id 3, a ordenação passa a ser a seguinte

1 - a
2 - c | SOBE
3 - b | SOBE

Você notou que a coluna info submiu, ou seja, b foi para o lugar de c, e vice-versa, e o id se manteve em ordem.

Para quem quer estudar o script para adaptar em algum sistema, crie uma tabela chamada datas e IMPORT o seguinte

* Um detalhe, quando você troca a segunda linha com a primeira, a primeira passa a ser a última linha

Código: Selecionar todos
CREATE TABLE `datas` (
  `id` int(10) NOT NULL auto_increment,
  `info` varchar(1) collate latin1_general_ci NOT NULL,
  UNIQUE KEY `id` (`id`)
)
INSERT INTO `datas` (`id`, `info`) VALUES
(1, 'a'),
(2, 'b'),
(3, 'c');

Crie um arquivo chamado conecta.php com o seguinte:

Código: Selecionar todos
<?php
$conexao = mysql_connect("localhost", "seulogin", "suasenha") or die(mysql_error());
$db = mysql_select_db("seubd");
?>

Agora vai o script principal, chamarei de principal.php

Código: Selecionar todos
<?php
include("conecta.php");
if($_GET['atualiza']) {
extract($_GET);
include("conecta.php");

// pega id anterior
$selec = mysql_query("SELECT id FROM datas WHERE id < $atual ORDER BY id DESC LIMIT 1") or die(mysql_error());
$anterior = mysql_fetch_array($selec);

// pega ultimo id
$selec2 = mysql_query("SELECT id FROM datas ORDER BY id DESC LIMIT 1") or die(mysql_error());
$ultimo = mysql_fetch_array($selec2);

// atualiza id
$atualiza = mysql_query("UPDATE datas SET id = ".($ultimo[id]+1)." WHERE id=".$anterior[id]."") or die(mysql_error());

// ordena ids
$atu = "SELECT id, info FROM datas ORDER BY id ASC";
$exec = mysql_query($atu, $conexao) or die(mysql_error());
$i = 1;
while($dados=mysql_fetch_array($exec)) {
extract($dados);
$update="UPDATE datas SET id='$i' WHERE info='$info'";
mysql_query($update) or die(mysql_error());
$i++;
}
// atualiza esse documento
header("Location:principal.php");
}

$selec = "SELECT id, info FROM datas ORDER BY id";
$exec = mysql_query($selec, $conexao) or die(mysql_error());
$total = mysql_num_rows($exec);
$i = 0;
while($campos=mysql_fetch_array($exec)) {
extract($campos);
$i++;
if($i==1) {
echo "$info - primeiro<br>";
} else {
echo "$info - <a href='?atualiza=sim&atual=$id'>SOBE</a><br>";
}
}
?>



detalhes...

Gostou do que encontrou? Divulgue, indique, participe, agradeça pelas respostas.

Faço scripts personalizados ou reparos em scripts. Orçamento MSN codigosnaweb [@] hotmail [.] com

Avatar do usuário
web
ADMIN
ADMIN
Mensagens: 11904
Registrado em: Sáb Jan 20, 2007 6:08 pm
Localização: RJ / RJ / Brasil

responder a dúvida

Voltar para Artigos sobre MySQL

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante