Как удалить данные из базы через определенное время?
В БД записываются данные. Нужно через определенное время, удалить эту запись, если не были получены определенные данные(запрос). Как это можно реализовать?
- Вопрос задан более трёх лет назад
- 4412 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 2
Для правильного вопроса надо знать половину ответа
Ставить таймстамп на записи и удалять старые данные при старте скрипта, который их использует (то есть сначала DELETE . WHERE timestamp < DATE_SUB(NOW(), INTERVAL 15 MINUTE), а затем уже SELECT).
Ответ написан более трёх лет назад

то есть при каждом посещении каждого пользователя — делаем лишний запрос? Что такое крон не слышали?

@Aliance Вопрос — а что чаще будет происходить — выборка этих данных или 15 минут по крону? И второй вопрос, критично или нет если в базе окажутся данные не за 15 минут, а за 29 минут 59 секунд, ну не успел ещё крон запустить удаление.

@Rsa97 не понял, зачем крон запускать раз в 15 минут-то? Каждую минуту нужно же. Тогда uptime будет до минуты. Нужно больше — запускаем несколько инстансов крона.
Удаление определенных записей через определенное время
Доброго времени суток! Помогите мне с одним вопросом. Есть БД с таблицей users, в этому таблице есть строки: id, user, age, city,work.
Нужно чтобы строка work чистилась каждые 6 часов после того, как пользователь в нее что-то добавил. Не могу понять, как это реализовать, может вы поможете.
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Удаление данных на определенное время
Подскажите,как удалить данные из таблицы на определенное время( Например если 1 номер в гостиннице.
Удаление переменных в определенное время
Есть массив с переменными, в него занесены ip адреса пользователей и мне надо что бы к примеру в.
Удаление записей через определенное время
Добрый день, как удалить запись через час?

Вывод записей через определенное время
Доброго времени суток, форумчане! Подскажите, как сделать, чтобы через заданное количество.
![]()
2034 / 1093 / 408
Регистрация: 29.04.2016
Сообщений: 2,612
ponomarevbro895,
Погугли Cron
Добавлено через 18 часов 22 минуты
ponomarevbro895,
Сейчас перечитал и подумал может сделать что-то вроде этого:
1 Создать строку в БД, например: time
2 Если пользователь что-то добавил в work то записать время добавления в time приплюсовав к этому времени 6 часов
3 При каждом заходе на страницу проверять не истекло ли 6 часов: текущая дата больше даты в ячейке?
Я давненько прибегал к такому способу, в каких-то ситуациях это может сгодиться.
1112 / 554 / 319
Регистрация: 21.06.2012
Сообщений: 1,854

Сообщение было отмечено ponomarevbro895 как решение
Решение
В таблицу нужно добавить поле data (TIMESTAMP)
далее:
$time = date("Y-m-d H:i:s", mktime(date("H")-6, date("i"), date("s"), date("m"), date("d"), date("y"))); $sql = mysqli_query($conn, "UPDATE `users` SET `work` = '' WHERE `id` = '$user_id' AND `data` $time'");
PHP. Как удалить элемент из массива
Если вы хотите удалить элемент массива, то вы можете использовать unset() или array_splice().
Также, если у вас есть значение и вы не знаете ключ для удаления элемента, вы можете использовать, array_search() чтобы получить ключ.
Как в PHP удалить элемент массива при помощи unset()
Обратите внимание, что при использовании unset() ключи массива не будут изменяться / переиндексироваться. Если вы хотите переиндексировать ключи, то используйте array_values() после unset(), что приведет к тому, что все ключи будут пронумерованы начиная с 0.
"a", 1 => "b", 2 => "c"]; unset($array[1]); //↑ Ключ, который нужно удалить ?>
[ [0] => a [2] => c ]
При помощи array_splice()
Если вы используете array_splice(), то они будут автоматически переиндексированы, но ассоциативные ключи не изменятся, в отличие от array_values(), где все ключи будут преобразованы в цифровые.
Также в array_splice() необходимо указать смещение, а не ключ!
"a", 1 => "b", 2 => "c"]; array_splice($array, 1, 1); //↑ Смещение, которое нужно удалить ?>
[ [0] => a [1] => c ]
array_splice() это же самое, что unset() – взять массив по ссылке. Это означает, что вы не хотите присваивать возвращаемые значения этих функций обратно в массив.
Удалить несколько элементов массива
Если вы хотите удалить несколько элементов массива и не хотите вызывать unset() или array_splice() несколько раз, вы можете использовать функции array_diff() или в array_diff_key() зависимости от того, знаете ли вы значения или ключи элементов, которые вы хотите удалить.
При помощи array_diff()
Если вам известны значения элементов массива, которые вы хотите удалить, то вы можете их использовать array_diff(). Как и раньше, unset() не будет изменять / переиндексировать ключи массива.
"a", 1 => "b", 2 => "c"]; $array = array_diff($array, ["a", "c"]); //└────────┘→ Значения массива, которые нужно удалить ?>
[ [1] => b ]
При помощи array_diff_key()
Если вы знаете ключи элементов, которые вы хотите удалить, то вы можете использовать array_diff_key().
Здесь вы должны убедиться, что вы передаете ключи как ключи во втором параметре, а не как значения. В противном случае вы должны перевернуть массив при помощи array_flip(). Тогда ключи не будут меняться /переиндексироваться.
"a", 1 => "b", 2 => "c"]; $array = array_diff_key($array, [0 => "xy", "2" => "xy"]); //↑ ↑ Ключи массива, которые нужно удалить ?>
[ [1] => b ]
Если вы хотите использовать unset() или array_splice() чтобы удалить несколько элементов с одинаковым значением, то вы можете использовать, array_keys() чтобы получить все ключи для определенного значения, а затем удалить все элементы.
Рекомендуемые статьи:
- Как изменить версию PHP на сервере с Debian 10
- PhpMyAdmin — как создать пользователя и базу данных
- WordPress — как отключить управление сайтом через xmlrpc
- Несколько причин медленной работы сайта на примере WordPress
- WordPress — смена домена сайта при помощи wp-cli
- Когда использовать index.php, а когда index.html
- Дата и время в PHP
- PHP. Различия между Fast-CGI, CGI, Mod-PHP, SuPHP, PHP-FPM
- Простой пример кода на языке PHP
- PHP. Проверка содержит ли строка определенное слово
- Как предотвратить SQL инъекции в PHP
- Как установить Linux, Apache, MySQL, PHP (LAMP) в Ubuntu 18.04
- Как настроить отображение ошибок в PHP
- Несколько трюков и секретов PHP
Как удалить запись в установленное время php
Сообщения: 50
Благодарности: 1
Ребят подскажите чайнику как реализовать на php+ mysql удаление записей из таблицы по заданному времени.
Например: есть группа статьей половину из которых выли сознаны пол года назад, необходимо создать скрипит который удалял стати который больше чем 30 дней
Заранее благодарю за помощь.
Сообщения: 6944
Благодарности: 864
| Конфигурация компьютера | |
| Процессор: i7-8700 @3.20GHz | |
| Материнская плата: ASUS B360M-K | |
| Память: Patriot DDR4 1333 2x4Gb | |
| HDD: KINGSTON SV300S37A120G, ST1000DM003-1ER162, WD10EZEX-08WN4A0, WD5000AZLX-75K2TA0 | |
| Видеокарта: MSI GTX1050Ti 4Gb | |
| Звук: ASUS XonarDX PCI-E | |
| Блок питания: Thermaltake Hamburg 530Watts | |
| CD/DVD: TSST SH-S223C | |
| Монитор: 23′ DELL U2312HM | |
| Ноутбук/нетбук: DELL N510 | |
| ОС: Win10 x64, Mint 20 | |
| Индекс производительности Windows: 5.9 | |
| Прочее: CANON Ixus 30 digital camera |
если есть доступ к crontab-у, то лучше оттуда (написать скрипт, удаляющий нужные таблицы, и в крон вписать его с указанием времени выполнения, скажем, каждый день в час ночи)
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.
Сообщения: 7318
Благодарности: 1204
| Конфигурация компьютера | |
| Процессор: Intel Core i5-2500K (-> 4.2 ГГц) | |
| Материнская плата: AsRock P67 Pro3 (Socket 1155) | |
| Память: 2×4096 МБ DDR3-1333 Kingston (-> 1600 МГц) | |
| HDD: Hitachi 2 ТБ + 0,75 ТБ (SATA2), SSD: OCZ Vertex3 (120 ГБ, SATA3) | |
| Видеокарта: VTX3D Radeon 7950 | |
| Звук: Asus Xonar DS (PCI) | |
| Блок питания: Chieftec CTG-550-80P (550 Вт, октябрь 2011) | |
| CD/DVD: DVD-RW LiteOn iHAS124 (SATA2) | |
| Монитор: Dell U2412M (24″, 1920×1200, e-IPS) | |
| ОС: Windows 7 Ultimate x64 | |
| Индекс производительности Windows: 7.6 | |
| Прочее: Кулер Zalman 10X Performa |
dmitryst, а нужно ли? Ведь требуется только 1 раз удалить записи.
magwolf,
Ключевым будет sql-запрос типа такого:
DELETE * FROM table_name WHERE st_date < '13.07.2009'
Разумеется, надо оформить соответствующим образом php-кодом. Писали ведь скрипты? Если нет, то читайте руководство php) Примерно так будет:

PHP код:
mysql_connect(. );
mysql_select_db(. );
mysql_query("DELETE * FROM table_name WHERE st_date < '13.07.2009'") or die("Ничего не вышло");
echo "Всё вышло";
?>
Вместо многоточий подставьте параметры соединения.
В результате будет или "всё", или "ничего" (если ошибки какие в запросе ).
Под st_date подразумевается имя поля, где хранится дата статьи. Соответственно, формат даты нужно использовать тот, который в БД записан. Бывает, что дату хранят в трёх полях (день, месяц, год), но это маловероятно.
Если есть какой-нибудь phpMyAdmin на сервере, то можете прямо в нём выполнить запрос (для начала всё то же самое попробуйте, но вместо DELETE напишите SELECT. Если выдаст именно те статьи, которые надо удалять, то пишите DELETE вторым запросом).
