Удаление нескольких строк из нескольких таблиц MYSQL - PullRequest
1 голос
/ 23 декабря 2011

У меня есть этот запрос, который отлично работает.Он удаляет старые записи на основе текущего времени.

$cleanacc_1 = "DELETE FROM $acc_1 
    WHERE `Scheduled` < DATE_SUB(UTC_TIMESTAMP(), INTERVAL 30 SECOND)";

$result = mysql_query($cleanacc_1);

Однако существует более 100 таблиц (учетных записей), которые необходимо удалить, и мне было интересно, могу ли я объединить их в один запрос.По возможности как?

Ответы [ 4 ]

0 голосов
/ 23 декабря 2011

Пожалуйста, рассмотрите следующий пример.

У меня есть три таблицы в следующей структуре.

Имена таблиц: t1, t2, t3

Поля: Id, name

Я собираюсь выполнить запрос на удаление с одним условием, код перекодировки которого должен быть меньше 10.

DELETE FROM t1, t2,t3 USING t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id<10 and t2.id<10 and t3.id<10.

Запрос был успешно выполнен (MySql). Я получил ожидаемый результат.

Поэтому, пожалуйста, попробуйте то же самое с вашим состоянием.

0 голосов
/ 23 декабря 2011

Вы можете настроить представление таблиц и затем запустить delete sql для этого представления.Это также должно удалить данные базовой таблицы.Схема и разрешения вашей таблицы могут повлиять на то, будет ли это работать или нет.Проверьте этот ответ, он также может помочь.

Удаляет ли удаление строки из представления удаление строки из базовой таблицы - MYsql?

0 голосов
/ 23 декабря 2011

Это означает, что вы создаете новую таблицу для каждой учетной записи. Почему вы не создаете запись для каждой учетной записи в одной таблице?

Например ...

create table account (id int unsigned primary key auto_increment, other fields...);

Если вы измените структуру таблицы, вы сможете удалить отдельные записи учетной записи одним запросом ...

delete from account where condition=true;

Отдельные записи транзакций для каждой учетной записи затем сохраняются в другой таблице и содержат идентификатор учетной записи, к которой они относятся ...

create table transaction (id, account_id, other transaction fields);

Если вы не измените структуру базы данных, вам нужно написать PHP-код, который проходит по каждой таблице и выполняет ваш запрос на удаление. Это очень неэффективно, и я призываю вас изменить дизайн таблицы в соответствии с предложением.

Если вы не понимаете, почему мое предложение по краслению таблицы лучше, опубликуйте больше информации о вашей базе данных, и я объясню более подробно с рабочим примером.

0 голосов
/ 23 декабря 2011

Нет способа сделать это, AFAIK;В любом случае, я не думаю, что было бы большой проблемой запустить 100 запросов, если вы не выполняете их для каждого запроса или около того ..

Ожидаете ли вы проблем с производительностью?В таком случае я бы, вероятно, использовал задание cron для выполнения этого запроса каждые X минут.

...