2011-04-17 48 views
1

我有這個表:添加一個字段,並插入一個增值

id ref  data 
1 111  data1 
2 111  data2 
3 111  data3 
4 111  data4 
5 222  data1 
6 222  data2 
7 222  data3 
8 333  data1 
9 333  data2 

,我想插入一個新的領域,打了個比方爲了,其中每一個裁判,我將設置新月價值。所以輸出應該是:

id ref  data order 
1 111  data1 1 
2 111  data2 2 
3 111  data3 3 
4 111  data4 4 
5 222  data1 1 
6 222  data2 2 
7 222  data3 3 
8 333  data1 1 
9 333  data2 2 

我可以做一個簡單的查詢嗎?

EDIT

上面的例子僅僅是一個例子。這是我在數據庫中真正的表:

CREATE TABLE `items` (
    `id` int(11) unsigned NOT NULL auto_increment, 
    `trackid` varchar(255) NOT NULL, 
    `side` varchar(255) NOT NULL, 
    `side_pos` char(2) NOT NULL default '#', 
    `pos` int(11) NOT NULL, 
    `hh` char(2) NOT NULL, 
    `mm` char(2) NOT NULL, 
    `ss` char(2) NOT NULL, 
    `atl` text NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=20229 DEFAULT CHARSET=utf8 

回答

6

MySQL不支持Analytics(分析)(IE:ROW_NUMBER),這是你會使用什麼你後輸出。用途:

SELECT x.id, x.ref, x.data, x.rank AS `order` 
    FROM (SELECT t.id, t.ref, t.data 
       CASE 
       WHEN @ref = t.ref THEN @rownum := @rownum + 1 
       ELSE @rownum := 1 
       END AS rank, 
       @ref := t.ref 
      FROM YOUR_TABLE t 
      JOIN (SELECT @rownum := NULL, @ref := -1) r 
     ORDER BY t.id, t.ref, t.data) x 

通常情況下,這將需要單獨的語句來聲明@rownum和@ref變量,但MySQL的讓您擺脫它,如果他們被定義就像你看到的例子。

如果ref值不匹配,CASE語句會將@rownum值重置爲1。否則,@rownum加1。增量@rownum值所關聯的列由ORDER BY子句決定。

+0

你忘分配@ref:= t.ref :) – 2011-04-17 17:58:31

+0

@nick rulez:一個錯字不忘記;)的添加 「:」 THX – 2011-04-17 17:59:32

+0

它不工作;我在表格中還有其他字段,我是否需要全部選中它們? – markzzz 2011-04-17 21:25:19

相關問題