2011-12-23 2 views
1

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

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

$result = mysql_query($cleanacc_1); 

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

ответ

0

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

Например ...

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-код, который проходит через каждую таблицу и запускает ваш запрос на удаление. Это очень неэффективно, и я настоятельно рекомендую вам пересмотреть таблицу, как было предложено.

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

+0

Согласен сэр, я должен перепроектировать.Тем не менее, я изучаю MySQL, так что не стесняйтесь :-) У меня разные таблицы для разных учетных записей, кроме имен таблиц; структура такая же, то есть Идентификатор, учетная запись, по расписанию, сообщение Я также выполняю несколько операторов выбора и берет на себя плату за процессор. Как бы вы порекомендовали меня? Спасибо – MaxBux

+0

Мне удалось использовать единый стол и его эффективность, а также удобство управления. Спасибо – MaxBux

0

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

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

0

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

Does deleting row from view delete row from base table - MYsql?

0

Обратите внимание на следующий пример.

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

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

поля: Id, имя

Im собирается выполнить запрос на удаление с одним условием, которое перекодировать идентификатор должен быть не менее 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

Это работает, но мне пришлось перейти на одну таблицу, чтобы упростить загрузку процессора. – MaxBux

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