0

假设我有以下 2 个表:

行程:

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。感觉应该有更好的方法,但我无法弄清楚,那么有没有更有效的方法呢?

4

1 回答 1

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 语句选择最大和最新行程。

于 2013-10-11T08:01:41.840 回答