回答
或者:
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++;
}
你的回答將正確地解決問題,只是等待有一些不同的方法來。 – 2010-12-15 11:45:55
我不想在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會不會更簡單?
對不起,但我不明白你的回覆:) – 2010-12-15 11:37:54
但謝謝你的回覆 – 2010-12-15 12:05:00
- 1. MS SQL Server:int Ids跳轉1000
- 2. 轉換列表到IDS
- 3. SQL Server uniqueidentifier Ids
- 4. SQL從IDS
- 5. SQL Server Int或BigInt數據庫表Ids
- 6. SQL Server反轉CONTAINS
- 7. SQL查詢反轉表內容
- 8. 在從表1明顯的IDS在SQL(MySQL的)
- 9. 反轉鏈表?
- 10. 計算總和選擇IDS在SQL
- 11. 選擇存儲SQL IDs在Entiies
- 12. 反轉和非反轉列表
- 13. 在SQL Server GRANT中轉義反斜槓
- 14. Sql表與3列的第二個表ids
- 15. 在SQL Server上回滾反轉和解鎖表格
- 16. k反轉鏈表
- 17. SQL查詢的提高表現在多個列中選擇不同表的IDS
- 18. HTML DOMs,ids vs no ids?
- 19. 表現「哪裏id(ids)」?
- 20. SQL得到的所有條目由IDS
- 21. 反轉在VB.NET
- 22. 告訴AutoMapper從ObjectList屬性轉換爲Ids列表
- 23. jQuery:如何將所有樣式表類+ ids轉換爲數組
- 24. 在SQL中轉換表格
- 25. 旋轉SQL表
- 26. 旋轉SQL表
- 27. SQL表結構反饋
- 28. 反轉條目在HTML表格
- 29. 如何在VB.NET中反轉列表?
- 30. 試圖在計劃中反轉列表
爲什麼?爲什麼?你爲什麼要改變主鍵的順序? – Mchl 2010-12-15 06:27:16
好問題.. – 2010-12-15 06:28:39
爲什麼你不想使用ORDER BY操作? – Beaker 2010-12-15 06:43:13