Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Как удалить запись из БД по истечению срока
Покинул форум
Сообщений всего: 8
Дата рег-ции: Июль 2014
Помог: 0 раз(а)
Уважаемые, помогите решить проблему.
Имеется БД в которую записана строчка с указанием даты окончания действия этой строчки в UNIX формате. т.е. мы знаем дату, когда должна быть удалена эта запись.
Какой мне нужно написать скрипт, чтобы в дальнейшем его повесить на CRON, который бы сверял дату в этой БД и удалял все строчки, дата которых закончилась?
Предоставлю скрипт, который заносит эти строчки в БД тому, кто согласится помочь.
Мой скайп pasha_ipv, готов оплатить помощь.
Также, готов в этой теме вместе с вами разобраться с этим делом, если никто за вознаграждение не поможет.
Спасибо.
Мелкий
Отправлено: 10 Июля, 2014 - 10:25:54
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Спасибо, я сделал таким образом
("DELETE FROM `таблица` WHERE `time` < UNIX_TIMESTAMP()");
Все удаляется, но теперь другой вопрос:
Мне надо, чтобы вместе с удалением этой строчки, удалялась строчка из другой БД, где нет уже указания даты. Единственное, что у них общее, это ник.
Как сделать так, чтобы при удалении строчки по методу, выше, в которой присутствует колонка с ником и датой дейтсвия, еще удалялась колонка с таким-же ником, но в другой БД и без даты действия?
Надеюсь, понятно объяснил... ;)
Мелкий
Отправлено: 10 Июля, 2014 - 10:57:40
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
DELETEFROM`tablename`,`anothertable`USING`tablename`JOIN`anothertable`ON`поле одной таблицы`=`поле другой табличц`WHERE`expire_date`<NOW()
Объясните, пожалуйста, в этой строчке, как я понимаю, мы указываем таблицы из обеих БД и далее делаем равнозначными разные поля из обеих БД?
Я правильно на картинке нарисовал? Прикреплено изображение (Нажмите для увеличения)
Покинул форум
Сообщений всего: 8
Дата рег-ции: Июль 2014
Помог: 0 раз(а)
Contr пишет:
А вы не путаете термин "БД" и термин "таблица" часом?
Нет, не путаю. БД - База Данных, Таблица - внутри БД
Я же на картинке нарисовал свою ситуацию.
Имею две Базы данных.
имя БД1 - one
в ней таблица tableOne
в БД1 записана строчка с указанием даты
имя БД2 - two
в ней таблица tableTwo
в БД2 записана строчка без указания даты
НО! в этих в этих строчках есть столбец, которые содержит одинаковые ники пользователей
Надеюсь понятно теперь? )
Contr
Отправлено: 10 Июля, 2014 - 12:26:02
Частый гость
Покинул форум
Сообщений всего: 202
Дата рег-ции: Окт. 2011 Откуда: с Марса
$sth=$this->pdo1->query("DELETE FROM тратата RETURNING name")//запрос к 1й БД
$arr=$sth->fetchAll();
foreach($arras$v){
$child=$v['name'];
$this->pdo2->query(DELETE FROM тратата WHERE child=$child)//запрос к 2 БД
}
(Добавление)
Вам надо использовать 2 объекта ПДО. Из одного при удалении вернуть значение имени удаленного пользователя. Затем вставить это имя в запрос ко второй БД, используя второй объект ПДО.
И да: RETURNING не работает MySQL. Зато работает в postgres
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
ipv2007 пишет:
Нет, не путаю. БД - База Данных, Таблица - внутри БД
На самом деле действительно надо было уточнить, часто по-странному обзывают.
Contr пишет:
Кросс-БД операторов не существует.
СУБД всё равно, в одной БД таблицы или в разных, лишь бы в рамках одного сервера (если не затрагивать dblink и прочее).
Нюансы только в том, что:
0) должно быть достаточно прав на обе БД
1) вместо `tablename` пишется полностью `databasename`.`tablename`
Это будет самым простым способом.
Если нет прав либо базы на разных машинах, то придётся джойнить на приложении:
Делаете из первой БД select `primary_key`, `поле таблицы` from `tablename` where `expired_date`<now();
в цикле обходите результат и рассылаете простой delete по разным соединениям.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.