2014-06-17 37 views
-1

我正在嘗試使用mysql查詢。我不確定,也許沒有這樣的語法。或者也許有,但我不能正確使用。Mysql按更新狀態選擇項目。 [語法錯誤]

反正我的查詢是:

SELECT `email` FROM `user` WHERE `username`='testuser' AND 1 IN (UPDATE `user` SET `lastcheck` = NOW() WHERE `username`='testuser'); 

有兩個 「其中」 condicitions。首先對於正確的用戶,secound是關於lastcheck的更新檢查。

我正在通過PhpMyAdmin sql頁面測試它。系統發出此錯誤:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE `user` SET `lastcheck` = NOW() WHERE `username`='testuser') LIMIT 0, 30' at line 1 
+2

你不能有一個更新語句作爲一個子查詢。它需要是一個選擇語句。 –

+2

你期望'1 IN(UPDATE ...)'做什麼? 'UPDATE'不返回任何行/值。 –

+0

你需要做2個查詢。首先運行'UPDATE',然後'SELECT'選擇你需要的行。 –

回答

2

有MySQL中沒有可用的語法將SELECT語句中執行UPDATE聲明。

在一般情況下,MySQL存儲函數是解決此問題的一種方法(即從存儲函數內執行UPDATE語句),但這不適用於您的具體情況,因爲您試圖修改已經在使用的表格。 (這就是MySQL的存儲功能的限制。)

做它出現您正在嘗試做的,只需要運行兩個單獨的語句:

UPDATE `user` SET `lastcheck` = NOW() WHERE `username`='testuser'; 
SELECT `email` FROM `user` WHERE `username`='testuser; 
-1

我看到您的查詢有一個問題。你不需要引用字段名稱或表名。只是你期望的字符字符串包含在現場:

SELECT Email from user where Username = 'testuser' 
+3

他在字段/表名稱周圍沒有*引號*。他有反駁,在這裏使用是正確的。 –

+0

查詢中標識符的反引號並不是問題。問題是試圖在'SELECT'語句的上下文中執行'UPDATE'語句。這是查詢中的問題。 – spencer7593