在sql表中反转id

时间:2010-12-15 06:21:16

标签: php sql logic

我有一张主要身份证明的表格    1个simer
   2 pawan
   3深
   4只羊    5个人
我想要逆转这个顺序
   5个人    4 pawan
   3深
   2只羊    1个人

我怎么能用编程或sql做到这一点? 我不想在sql中使用order by

2 个答案:

答案 0 :(得分:2)

或者:

1)按降序排列按ID排序的所有行,然后按升序将它们插入到新表中,该表的AUTO_INCREMENT将以相反的顺序分配标识符。现在,您可以使用新标识符将这些行复制回原始表。

2)将按ID排序的所有行按降序排列到程序中,删除它们,然后使用新ID重新插入它们:

$sql = "SELECT id, name FROM table ORDER BY id DESC";
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result)) {
    $rows[] = $row;
}

//empty the table, to avoid primary key conflicts
mysql_query("TRUNCATE TABLE table");    

$i = 1;
foreach ($rows as $row) {
  mysql_query("INSERT INTO table (id, name) VALUES ($i, '" . mysql_real_escape_string($row['name']) . ")");
  $i++;
}

答案 1 :(得分:0)

  

我不想在sql中使用order by

但这正是SQL提供ORDER BY子句的原因。

您是否只想反转当前数据的顺序,还是希望系统将指令序列号减少到新记录?

前者是后者的先决条件......

UPDATE yourtable SET id=(4294967295-id);

请注意,虽然您可以控制每个新自动增量值与前一个值的不同(通过指定auto_increment_increment),但只需将此值设置为-1将无法解决问题,因为此delta应用的基值是SELECT MAX(id)FROM yourtable - 所以即使mysql允许你指定auto_increment_increment为-1​​,你最终会得到重复的行,因此你需要使用直整数重新表示对模式中auto_increment类型的所有引用并使用而是一个序列生成器。然后你需要重写所有代码以使用序列生成器而不是INSERT_ID()/ mysql_insert_id()。

使用ORDER BY会不会更简单?