2013-10-11 40 views
0

假設我有以下2個表:MySQL的 - 記錄最遠行程

車次:

driverId (PK), dateTravelled, totalTravelDistance

farthest_trip(結構相同)

driverId (PK), dateTravelled, totalTravelDistance

其中只有最最近的旅程存儲:

REPLACE INTO JOURNEYS ('$driverId', '$totalTripDistance');

我想存儲的最遠行程走遍每個driverId爲好,但不幸的是你不能有上INSERT... ON DUPLICATE KEY UPDATE語句的條件,否則我就會有一個觸發,例如:

INSERT INTO farthest_trip(driverId, dateTravelled, totalTravelDistance) ON DUPLICATE KEY UPDATE dateTravelled = new.dateTravelled, totalTravelDistance = new.totalTravelDistance WHERE totalTravelDistance < new.totalTravelDistance;

所以我要做的就是插入第一個表後,在PHP我檢查當前距離大於先前記錄的人,如果是這樣,然後更新farthest_journey。感覺應該有更好的方法,但我無法弄清楚,那麼是否有更有效的方法呢?

回答

3

您可以創建一個觸發器。像

CREATE TRIGGER farhest_trigger BEFORE INSERT ON trips 
    FOR EACH ROW 
    BEGIN 
    UPDATE farthest_trips SET date=NEW.date, distance=NEW.distance WHERE driverId=NEW.driverId AND distance < NEW.distance; 
    END; 

但是,那麼你會有代碼,從PHP角度「神奇地」執行。

我認爲更好的解決方案是將新行程添加到行程表中,並使用SELECT語句選擇最大和最新行程。

+0

我不介意神奇的一部分;)但是,a)我們不能存儲所有旅行,因爲會有數百萬,b)更新失敗,因爲第一次旅行將不會有一個條目farthest_trip。 – StackOverflowed

+0

而不是觸發器中的UPDATE,使用帶有ON DUPLICATE KEY UPDATE子句的INSERT。 – Kickstart