MySQL запрос на удаление записей, которые соответствуют нескольким полям - PullRequest
1 голос
/ 25 июля 2011

У меня есть база данных, которая выглядит следующим образом:

CREATE TABLE cargo (
    cargodate int unsigned NOT NULL,
    cargoname CHAR(128) NOT NULL,
    lattitude double NOT NULL,
    longitude double NOT NULL,
    user CHAR(64) NOT NULL
) type=MyISAM;

Я хочу убедиться, что для одного груза в одном месте с одним и тем же пользователем не более 5 записей.Пользователь может иметь несколько записей, если они находятся в разных местах (широта, долгота).

Как мне сделать, чтобы мой оператор SQL INSERT позаботился об этом?

Прямо сейчас я выполняю:

   INSERT INTO cargo VALUES (UNIX_TIMESTAMP(), '{$cargoname}', '{$lat}', '{$lng}', '{$user}');

Я могу УДАЛИТЬ ИЗ, но я хочу удалять записи, только если их больше 5. В этом случае я хочу удалить самые старые записи

Спасибо Deshawnt

Ответы [ 2 ]

1 голос
/ 25 июля 2011

Вы можете использовать триггеры http://dev.mysql.com/doc/refman/5.0/en/triggers.html Сразу после вставки вы можете удалить все ненужные записи.

0 голосов
/ 26 июля 2011

Использование триггера, как упоминал Руслан Полуцыган, было бы наиболее естественным решением.

Если вы не хотите возиться с ними, то альтернативой будет запустить:

SELECT * FROM cargo ORDER BY cargodate DESC LIMIT 4,18446744073709551615

перед запуском вставки, а затем удалите строки, возвращаемые этим запросом, а затем выполните вставку.

В качестве дополнительного примечания номер 18446744073709551615 был взят из примера из документации MySQL :

Чтобы извлечь все строки от определенного смещения до конца набора результатов, вы можете использовать некоторое большое число для второго параметра

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...