2013-07-10 87 views
0

我在我的數據庫如下表:UPDATE表名,(SELECT @id:= 0)DM SET sale_id =(@id:= @id 1)

CREATE TABLE IF NOT EXISTS `candidate` (
    `candidate_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `roll_no` int(10) unsigned NOT NULL, 
    `candidate_name` varchar(255) DEFAULT NULL, 
    `batch_id` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`candidate_id`), 
    KEY `candidate_name` (`candidate_name`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT; 

我需要做的是將roll_no分配給特定批次中的候選人。即roll_no將從1開始,每個batch_id。 *(不用說,每批或每批有數千個候選人)*。默認情況下,roll_no字段的值爲0。

我試着這樣做:

UPDATE candidate c, (SELECT @id := 0) serial 
SET roll_no = (@id := @id + 1) 

WHERE c.batch_id = 5 
ORDER BY c.candidate_name ASC 

結果造成:不正確使用UPDATE和ORDER BY的 如果我省略ORDER BY子句,它工作正常,但我需要根據roll_no分配給考生他們的名字的升序 有沒有什麼辦法可以實現我正在嘗試的......最重要的是,我清楚了嗎? 提前感謝你。

回答

0

尤里卡!這奏效了

UPDATE candidate c 
JOIN (SELECT candidate_id, candidate_name FROM candidate ORDER BY candidate_name ASC) co ON (c.candidate_id = co.candidate_id) 
JOIN (SELECT @a:=0) dm 
SET roll_no = (@a:[email protected]+1) 
WHERE batch_id = 5 

得到了一些想法來自
update+order by in same query mysql

埃裏克·盧克曼,感謝您的答覆。

0

這工作?

SET @id := 0; 
UPDATE candidate c 
SET roll_no = (@id := @id + 1) 
WHERE batch_id = 5 
ORDER BY candidate_name ASC; 
+0

對不起,它沒有工作! –

相關問題