MySQL 5.1以错误的顺序插入/选择数据

时间:2012-03-28 03:12:55

标签: mysql sql

我正在尝试按排序顺序将数据插入表中,以便以后快速检索。我使用序数列来指定数据的顺序。像这样:

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中不起作用。

似乎在变量递增后进行排序,而之前变量在排序后递增

有什么想法吗?

2 个答案:

答案 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变量初始化结束时有一个撇号标记。请检查它是否符合语法。我认为编译器会被这个撇号标记弄糊涂。