我有一张主要身份证明的表格
1个simer
2 pawan
3深
4只羊
5个人
我想要逆转这个顺序
5个人
4 pawan
3深
2只羊
1个人
我怎么能用编程或sql做到这一点? 我不想在sql中使用order by
答案 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会不会更简单?