2017-02-18 86 views
0

我想更新與狀態數2 = 8基於MySQL中狀態列的最小數字更新列?

UPDATE tqueue 
SET status = '8' 
WHERE (SELECT MIN(number) 
     FROM tqueue 
     WHERE STATUS IN ('4') 
     AND get_ticket >= CURDATE() 
     AND get_ticket < DATE_ADD(CURDATE(), INTERVAL 1 DAY) 
     GROUP BY service) 

輸出:

-------------------------------------------------- 
number | status | get_ticket 
-------------------------------------------------- 
    3   4   2017-02-18 13:43:01 
    2   4   2017-02-18 12:34:03 
    1   8   2017-02-18 10:04:59 
+1

'update tqueue set status = 8 where number = 2'。請解釋,如果這能解決您的問題或爲什麼不 –

+0

更新您的問題在一致的wya ..你指的列和條件,不在你的樣本和在你的解釋.. – scaisEdge

+0

當我每次更新數據最小數字與狀態4將更改爲狀態8不僅數字2 – budi

回答

0

您是否在尋找更新的status=8分鐘numberstatus=4

試試這個:

SELECT @mynumber:=number FROM tqueue 
WHERE STATUS = '4' 
AND get_ticket >= CURDATE() 
AND get_ticket < DATE_ADD(CURDATE() , INTERVAL 1 DAY) 
GROUP BY service 
order by number asc 
limit 0,1 ; 

UPDATE tqueue SET status = '8' where number = @mynumber ; 

此外,您還可以使用臨時表更新自我參照:

CREATE TEMPORARY TABLE mytbl_numbers AS 
SELECT number FROM tqueue 
WHERE STATUS = '4' 
AND get_ticket >= CURDATE() 
AND get_ticket < DATE_ADD(CURDATE() , INTERVAL 1 DAY) 
GROUP BY service 
order by number asc 
limit 0,1 ; 

UPDATE tqueue SET status = '8' where number in (SELECT * FROM mytbl_numbers) ; 

更多有用的答案可以在[+] & [+] & ......

找到
+1

錯誤#1093 - 您無法在FROM子句中指定目標表'tqueue'進行更新 – budi

+0

抱歉,由於我的錯誤,我們無法在'update中使用一個表作爲目標表和源表'和'刪除'。所以我改變了代碼,它解決了嗎? – MohaMad

+0

謝謝你MohaMad,它的工作 – budi