根据列值重新排序整个MySQL表

时间:2013-05-03 11:25:28

标签: php mysql

我有一个包含auto_increment字段的大约17,000条记录的MySQL表。结构是这样的:

+--------+-------------------+-----------+
| ID     | Year1             |  Year2    |
+--------+-------------------+-----------+
| 1      | 2001              | 2         |
| 2      | 2001              | 1         |
| 3      | 1999              | 3         |
| 4      | 2004              | 2         |
+--------+-------------------+-----------+

我希望通过更改auto_increment ID来重新排序整个表的物理结构,以便按升序排序时匹配Year1Year2列。像这样......

+--------+-------------------+-----------+
| ID     | Year1             |  Year2    |
+--------+-------------------+-----------+
| 1      | 1999              | 3         |
| 2      | 2001              | 1         |
| 3      | 2001              | 2         |
| 4      | 2004              | 2         |
+--------+-------------------+-----------+

这可以通过MySQL中的查询来实现,还是应该使用PHP和循环,等等?

更新 用例是这样的:我拥有的实际数据以特定模式存储。我不希望最终用户识别模式(2001年,然后是2001年,然后是1999年等)。因此,我想以标准的,有条理的方式重新排列数据。

此表没有外键。

1 个答案:

答案 0 :(得分:2)

首先备份数据库

不是重新安排实际的表,而是创建一个新表并插入旧表的值。像这样:

使用自动增量创建表,主键

CREATE TABLE Table2
    (`ID` int auto_increment primary key, `Year1` int, `Year2` int)
;

使用SELECT声明

插入
INSERT INTO Table2
       (`Year1`, `Year2`)
SELECT Year1, Year2
FROM Table1
ORDER BY Year1, Year2;

See this SQLFiddle