如果我有这个表:
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时,您可以平均时间重新创建该表