我試圖按排序順序將數據插入表中,以便以後快速檢索。我使用序號列來指定數據的順序。像這樣:MySQL 5.1插入/選擇錯誤訂單中的數據
SET @ctr = -1;
insert into search_data (trans_id, ordinal)
select trans_id, @ctr:[email protected]+1
from transactions
order by created;
created is a datetime field。
在沒有插入的情況下執行select會導致行按正確的順序返回,但ctr變量不會正確地增加。例如: -
+---+----------+--------------+---------------------+
| 1 | trans_id | @ctr:[email protected]+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中不起作用。
好像排序變量遞增之後,正在做的,而以前的變量是那種
任何想法後會增加嗎?
子查詢呢?從中選擇trans_id,@ctr:= @ ctr + 1(從創建的交易訂單中選擇trans_id,trans_id) – Glenn 2012-03-28 03:17:29
謝謝格倫,今晚你爲我節省了很多麻煩。發佈這個答案,我會「接受」它。 – NXT 2012-03-28 03:31:01
謝謝。我想知道發佈之間的行爲是否改變我不知道mysql規則,但是Oracle在使用rownum時特別提到了子查詢:如果ORDER BY子句在同一查詢中跟隨ROWNUM,那麼行將由ORDER BY子句重新排序。結果可能會根據行訪問的方式而有所不同。 http://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm – Glenn 2012-03-28 03:37:18