2011-04-17 51 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

相关问题