我正在尝试按排序顺序将数据插入表中,以便以后快速检索。我使用序数列来指定数据的顺序。像这样:
SET @ctr = -1;
insert into search_data (trans_id, ordinal)
select trans_id, @ctr:=@ctr+1
from transactions
order by created;
created是一个日期时间字段。
执行不带插入的select会使行以正确的顺序返回,但ctr变量不会正确递增。 E.g:
+---+----------+--------------+---------------------+
| 1 | trans_id | @ctr:=@ctr+1 | created |
+---+----------+--------------+---------------------+
| 1 | 131379 | 232 | 2011-10-17 12:27:09 |
| 1 | 131377 | 231 | 2011-10-17 12:24:30 |
| 1 | 131311 | 230 | 2011-10-16 23:44:12 |
| 1 | 131305 | 229 | 2011-10-16 21:57:35 |
| 1 | 129948 | 46 | 2011-10-10 13:24:58 |
| 1 | 129947 | 45 | 2011-10-10 13:24:58 |
| 1 | 129946 | 44 | 2011-10-10 13:24:58 |
| 1 | 129945 | 43 | 2011-10-10 13:24:58 |
| 1 | 129944 | 42 | 2011-10-10 13:24:58 |
这种技术在MySQL 5.0,4.x和3.x中对我有用。但它在5.1中不起作用。
似乎在变量递增后进行排序,而之前变量在排序后递增
有什么想法吗?
答案 0 :(得分:2)
尝试子查询:
select trans_id, @ctr:=@ctr+1
from ( select trans_id
from transactions
order by created, trans_id ) as t
asdfasdf
答案 1 :(得分:1)
ctr
变量初始化结束时有一个撇号标记。请检查它是否符合语法。我认为编译器会被这个撇号标记弄糊涂。