2013-04-16 33 views
0

我創建了一個查詢來更新一個字段。但我需要更改最後一條記錄的值。在我ps_order_history表還有的DATE_ADD列。它的類型是datetime。如果我不能在where子句中使用max()函數,我怎麼能得到最後一條記錄?這是我得到了什麼到現在爲止(有一些固定的參數,但它只是爲了測試我會在PHP代碼進行更改。):最大(datetime_column)在where子句中

UPDATE ps_order_history AS h 
INNER JOIN ps_order_detail d ON d.id_order = h.id_order 
INNER JOIN ps_orders o ON o.id_order = h.id_order 
SET h.id_order_state = 18 
WHERE d.product_name = "Academia Mastermaq" 

AND o.id_customer = (
SELECT id_customer 
FROM ps_customer 
WHERE firstname = "Cristiano" 
AND lastname = "Ferreira dos Santos" 
) 

AND max(h.date_add) 

感謝。

+0

號我只想更新一個數量級。最後一個,與date_add字段相關聯。 –

+0

你試過WHERE h.date_add = max(h.date_add)嗎? 有兩個WHERE子句中的第一個查詢 'UPDATE ... WHERE o.id_consumer =(SELECT ...)WHERE ...' – Marcassin

+0

我打字錯誤的。其實,我已經使用了AND,並得到了這個錯誤:錯誤代碼:1111無效使用組功能 –

回答

0

知道了!我發現有關變量在MySQL中,並使用了一個存儲最大id_order_history(我意識到,因爲最大id_order_history是最後一個數據我並不需要DATE_ADD列)。之後,我更新了桌子。

這是查詢:

SET @maxid = 
(
    SELECT max(h.id_order_history) 

    FROM ps_order_history h 

    WHERE h.id_order = 
    (
     SELECT max(p.id_order) 
     FROM ps_orders p 
     INNER JOIN ps_order_detail d ON d.id_order = p.id_order 

     WHERE p.id_customer = 
     (
      SELECT id_customer 
      FROM ps_customer 
      WHERE firstname = '$firstname' 
      AND lastname = '$lastname' 
      LIMIT 1 
     ) 

     AND d.product_name = '$nome_produto' 
     AND p.module = 'pagseguro' 

     LIMIT 1 
    ) 
); 

UPDATE ps_order_history h 
SET h.id_order_state = $status 
WHERE h.id_order_history = @maxid; 
0

你可以通過使用由xxx訂購DESC LIMIT 1

+0

你確定排序會得到最後的date_add記錄嗎? **更新** 的MySQL已經表明我,我不能用戶的ORDER BY一個WHERE子句。 –

+0

* MySQL向我展示了我不能在UPDATE子句中使用ORDER BY –