MySQL - 排序后插入行

时间:2013-07-03 03:51:52

标签: php mysql codeigniter

如果我有这张桌子:

perma_table:

+-------+-------+
|   A   |   B   |
+-------+-------+
|   a   |   5   |
|   c   |   7   |
|   a   |   8   |
|   b   |   9   |
|   a   |   7   |
|   c   |   6   |
|   a   |   8   |
+-------+-------+

我想制作

inserted_table:

+-------+-------+-------+
|   A   |   B   |   C   |
+-------+-------+-------+
|   a   |   5   |   1   |
|   a   |   7   |   2   |
|   a   |   8   |   3   |
|   a   |   8   |   4   |
|   b   |   9   |   5   |
|   c   |   6   |   6   |
|   c   |   7   |   7   |
+-------+-------+-------+

怎么做?
即时通讯使用代码点火器(php),这是所有这个方法可以通过使用查询来完成,而不使用CI活动记录/ php函数?

2 个答案:

答案 0 :(得分:1)

您可以使用单个查询

来完成
CREATE TABLE inserted_table as
SELECT A,B,@num:=@num+1 AS C
FROM perma_table,(select @num:=0) temp
ORDER BY A,B;

答案 1 :(得分:1)

如果您只想要一个查询来完成它,它就这么简单: 正常插入,插入后即可选择 SELECT * FROM表ORDER BY A,B,C ASC

但是如果你想保留这个订单,没有任何选择没有订单,你可以创建一个视图或新表,如

CREATE VIEW inserted_table AS
SELECT A, B, @id = @id+1 AS C FROM perma_table
ORDER BY A,B;

或新表(无视图)

CREATE TABLE inserted_table AS
SELECT A, B, @id = @id+1 AS C FROM perma_table
ORDER BY A,B;

使用视图,你可以在perma_table上插入任何值,inserted_table将自动生成,如果你选择第二种情况,你可以在编辑perma_table时重新创建表格