2010-12-15 31 views
0

我有主ID
1賽盟
2爬完
3深
4羊
5人
我想顛倒該順序
5賽盟
4個帕萬的表
3深
2羊
1人
反轉IDS在SQL表

我如何用編程或sql做到這一點? 我不希望在SQL中使用命令

+3

爲什麼?爲什麼?你爲什麼要改變主鍵的順序? – Mchl 2010-12-15 06:27:16

+0

好問題.. – 2010-12-15 06:28:39

+2

爲什麼你不想使用ORDER BY操作? – Beaker 2010-12-15 06:43:13

回答

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++; 
} 
+0

你的回答將正確地解決問題,只是等待有一些不同的方法來。 – 2010-12-15 11:45:55

0

我不想在SQL

使用順序

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

你只是想要顛倒當前數據的順序,還是希望你的系統將減少的順序號分配給新記錄?

前者將是一個先決條件,後者如此....

UPDATE yourtable SET id=(4294967295-id); 

注意,儘管可以控制由每個新的自動增量值從以前的不同的量(通過指定auto_increment_increment ),只需將此值設置爲-1並不能解決問題,因爲此增量值應用於的基本值是SELECT MAX(id)FROM yourtable - 即使mysql允許您指定-1的auto_increment_increment,您最終也會有重複的行,因此您需要使用直整數對圖表中auto_increment類型的所有引用進行復制,然後使用序列生成器。然後,您需要重寫所有代碼以使用序列生成器而不是INSERT_ID()/ mysql_insert_id()。

使用ORDER BY會不會更簡單?

+0

對不起,但我不明白你的回覆:) – 2010-12-15 11:37:54

+0

但謝謝你的回覆 – 2010-12-15 12:05:00