[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Удаление строки из Mysql по истечении времени
OneFinal
нужно что бы по истечении одного дня удаляло строку
можно как то сделать курлом запуск только как на Php проверить прошла ли эта дата ?








Спустя 18 минут, 42 секунды (23.02.2012 - 17:39) Rand написал(а):
В таблице создается поле для даты, которая хранит время в формате UNIX.
Далее при запуске скрипта, делаем удаление, таким запросом:
DELETE FROM table WHERE UNIX_TIMESTAMP() - date >= 86400

Спустя 53 минуты, 14 секунд (23.02.2012 - 18:32) OneFinal написал(а):
вот смотри пример скрипта, или мне его на курл поставить ? не вьехал чуть )



<?php

$ip=$_POST['ip'];
$name=$_POST['name'];

$db = "pkfor148";
$val = base64_encode($name);
$date = date("m.d.y");

if (!$conn = mysql_connect("localhost","",""))
{
echo "<h2>MySQL Error!</h2>";
exit;
}
mysql_select_db($db);


if(empty($ip))
{
echo "<font color=\"red\"><h1><center>Пустой ип!</center></h1><br></font>";
}

if(empty($name))
{
echo "<font color=\"red\"><h1><center>Пустое имя!</center></h1></font><br>";
}
else
{


$result=mysql_query("INSERT INTO `nprotect`(`id`, `ip`, `key`, date) VALUES ('$name','$ip','FFCCAA','$date')");
echo mysql_error();
//Если запрос пройдет успешно то в переменную result вернется true
echo "<br><center><input type=\"text\" size=\"20\" VALUE=\"$val\" readonly ></center>";
echo "<br><center><font color = \"red\" size = \"6\">Удачно то что вверху скопировать в файл gg_sys.ini</font>";



}

?>

Спустя 23 минуты, 47 секунд (23.02.2012 - 18:56) Kuliev написал(а):
OneFinal

Возможно Вы имели ввиду CRON а не CURL

Спустя 9 минут, 47 секунд (23.02.2012 - 19:06) OneFinal написал(а):
да )

Спустя 48 минут, 25 секунд (23.02.2012 - 19:54) Rand написал(а):
Ну вот, как я говорил, время я бы хранил в unix-time. Для этого нужно изменить запрос на вставку так:
mysql_query("INSERT INTO `nprotect`(`id`, `ip`, `key`, `date`) VALUES ('$name', '$ip', 'FFCCAA', UNIX_TIMESTAMP())");

Поле date в базе должно быть типа INT(10) UNSIGNED, т.к. UNIX_TIMESTAMP - это число секунд, прошедших с 1970 года до настоящего времени. Теперь создаешь скрипт для удаления:
<?php
//TODO: Чтобы не дублировать код, параметры подключения лучше вынести в отдельный файл
$db = "pkfor148";

if (!$conn = mysql_connect("localhost","",""))
{
echo "<h2>MySQL Error!</h2>";
exit;
}
mysql_select_db($db);

mysql_query('DELETE FROM `nprotect` WHERE UNIX_TIMESTAMP() - `date` >= 86400');
Всё. Даем задание планировщику Cron запускать этот скрипт каждый час и при запуске будут удаляться все строки с момента добавления которых прошло 86400 секунд (сутки).
При желании можно обойтись без Cron. Для этого можно добавить этот скрипт в начало index.php к примеру. Т.е. он будет выполнятся при каждой загрузке страницы, но строка удалится только тогда, когда наступит время. Но лучше конечно Cron.

Спустя 3 часа, 8 минут, 21 секунда (23.02.2012 - 23:03) OneFinal написал(а):
спасибо все понятно но ещё один вопрос например у меня не все клиенты будут попадать под удаление через 1 день, я создаю ещё одно поле например test если там 1 то удаление происходит если 0 то нет, так вот как поставить 2 условия WHERE??

Спустя 11 минут, 33 секунды (23.02.2012 - 23:14) OneFinal написал(а):
вот смотрите что у меня получилось,

mysql_select_db($db);


if(empty($ip))
{
echo "<font color=\"red\"><h1><center>Пустой ип!</center></h1><br></font>";
}

if(empty($name))
{
echo "<font color=\"red\"><h1><center>Пустое имя!</center></h1></font><br>";
}
else
{


$result=mysql_query("INSERT INTO `nprotect`(`id`, `ip`, `key`, date,test) VALUES ('$name','$ip','FFCCAA', UNIX_TIMESTAMP(),'$test')");
mysql_query('DELETE FROM `nprotect` WHERE UNIX_TIMESTAMP() - `date` >= 86400' and 'test' == '1');
echo mysql_error();
//Если запрос пройдет успешно то в переменную result вернется true
echo "<br><center><input type=\"text\" size=\"20\" VALUE=\"$val\" readonly ></center>";
echo "<br><center><font color = \"red\" size = \"6\">Удачно то что вверху скопировать в файл gg_sys.ini</font>";


вроде все верно

Спустя 5 минут, 57 секунд (23.02.2012 - 23:20) OneFinal написал(а):
upd, провтычил перенес удаление из "условий" по выше над условиями. )

Спустя 8 часов, 43 минуты, 46 секунд (24.02.2012 - 08:04) twin написал(а):
Rand
А зачем в UNIX? Чем обычный тип DATE не угодил?

Спустя 32 минуты, 9 секунд (24.02.2012 - 08:36) McLotos написал(а):
У меня сделано так:
DELETE FROM table 
WHERE
date < NOW() - INTERVAL '20' MINUTE"

Т.е. если запись создана больше 20и минут назад, то она удаляется. Можно легко переделать под 1 день

Спустя 2 часа, 23 минуты, 59 секунд (24.02.2012 - 11:00) Rand написал(а):
OneFinal, после 86400 лишняя кавычка.
twin DATE не хранит время, только дату. Если запись будет добавлена в 23.59, то через минуту она удалится. Можно использовать DATETIME - но для него требуется 8 байт против 4-х в INT. Плюс ещё проблемы при переносе базы на сервер с другой временной зоной - если вы не учли, что дата записывается как есть, а не в UTC. Вместо INT можно использовать TIMESTAMP.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.