0

如果我有这张桌子:

永久表:

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

我要实现

插入表:

+-------+-------+-------+
|   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 函数?

4

2 回答 2

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;
于 2013-07-03T03:57:24.837 回答
1

如果你只想要一个查询,它很简单:正常插入,插入后你可以选择 SELECT * FROM table 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 时都会重新创建表

于 2013-07-03T04:04:30.093 回答