MySQL-排序后插入行


MySQL - insert row after sort

如果我有这个表:

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   |
+-------+-------+-------+

如何做到这一点
im使用代码点火器(php),这是不是所有这些方法都可以通过使用查询来完成,而不使用CI活动记录/php函数?

您可以使用单个查询

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

如果您只想用一个查询来完成,那么它非常简单:正常插入,插入后可以选择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时,您可以平均时间重新创建该表