0

我有 my_table 的名字。我想选择这些按名称排序的并将它们按此顺序插入到另一个表 my_table2 中。My_table2 有一个字段“display_order”,相对于名称的顺序应该是连续的。

insert into my_table2(display_order, name)
select something_special(), name from my_table
order by name;

这样 display_order 是 1,2,3.. 遵循名称顺序。

这是否可以通过单个选择进行,即不是循环:

  loop through my_table1 sorted by name:
      insert name, display_order into my_table2
      increment display_order 

这是innodb

为什么我想要这个:

my_table 选择实际上要复杂得多,涉及各种用户搜索参数。我希望能够进行一次此搜索,然后将结果保存到 my_table 2 中。从 my_table2 中获取数据会更快更容易。而且,是的,我知道 my_table2 不会随着 my_table 中的数据更改而更新。这是应该的。

4

1 回答 1

0

如果我正确理解您的问题,您需要类似

insert into my_table2(display_order, name)
select @a:=@a+1, name 
from my_table
join (select @a :=0) b ON (1=1)
order by name;

为了绝对确定变量根据order by(我不记得mysql是否保证何时准确计算变量)递增,您可能需要像这样重写它:

insert into my_table2(display_order, name)
select @a:=@a+1, a.name
from 
(
    select  name 
    from my_table
    order by name
 )a
 join (select @a :=0) b ON (1=1)
于 2013-11-11T14:19:24.933 回答