我有名字的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中的数据被更改了。这是应该的。
答案 0 :(得分: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)