0

フィールドを更新するクエリを作成しました。しかし、最後のレコードの値を変更する必要があります。私のps_order_historyテーブルには、date_add列があります。その型はdatetimeです。where 句で max() 関数を使用できない場合、最後のレコードを取得するにはどうすればよいですか? これは私が今まで得たものです(いくつかの固定パラメータがありますが、テストするだけです.PHPコードでこれを変更します):

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)

ありがとう。

4

2 に答える 2

0

Order by xxx DESC LIMIT 1 を使用してそれを行うことができます

于 2013-04-16T12:55:01.187 に答える
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;
于 2013-04-19T13:44:06.447 に答える