2013-10-11 3 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

Я не возражаю против волшебной части;) однако, мы не можем хранить все поездки, так как были миллионы, и б) обновление не сработало, потому что для первой поездки не будет записи в farthest_trip. – StackOverflowed

+0

Вместо UPDATE в триггере используйте INSERT с предложением ON DUPLICATE KEY UPDATE. – Kickstart

Смежные вопросы