Изтриване на изтекли записи от датабазата

cmsfan

Registered
Имам следното в датабазата:
f2b4bfcb99fc6e68.PNG

ban_created - кога е създаден бана (Unix time)
ban_length - продължителността на бана в минути - докато стане неактивен - изтече
Въпроса ми е как да стане така, че с mysql_query да се трият изтеклите записи ?

Наскоро тук ми дадоха подобен пример:
Код:
$date1=time();
mysql_query("DELETE FROM `db` WHERE `tb` > '$date1'") or die(mysql_error());

Има ли вариант да стане и тук по-някакъв начин ?
И още нещо, бановете от ban_lenght със стойност '-1' - да не ги трие (това е важно)
 
Пробвай да го направиш малко по-разширено, по следният алгоритъм :

Вземаш данните от базата данни. Записваш ги в масив, като пропускаш тези с "-1" по следният начин
PHP:
<?php

if($row['ban_length'] < 0 ) {  continue; }
След което на теб ти трябва времето когато изтича.
А ти имаш времето на бана и колко време ще стои бана.
Събираш двете колонки ( като в нея няма да има тези с -1 ) и почваш да сравняваш. Ако "новото" време е по-малко от time(); изтрива записа.



Пробвай се да го напишеш така. Ако успееш ще ти помогна :)
 
На всяка заявка(за страница, не sql), независимо в коя страница изпълняваш следната заявка:

PHP:
DELETE FROM table WHERE ban_length != -1 AND (ban_created + ban_length) < $time

Където променливата $time e равна на time();
 
Не става така, трие почти всичко останаха някакви 2 бана с по 1 месец.
Ето така го направих:
Код:
$date1=time();
mysql_query("DELETE FROM `".$config->db_prefix."_bans` WHERE (ban_created + ban_length) < $date1 AND (ban_created + ban_length) != -1");
 
cmsfan каза:
Не става така, трие почти всичко останаха някакви 2 бана с по 1 месец.
Ето така го направих:
Код:
$date1=time();
mysql_query("DELETE FROM `".$config->db_prefix."_bans` WHERE (ban_created + ban_length) < $date1 AND (ban_created + ban_length) != -1");
Оправих си поста, заявката не беше правилна, но сега смятам че ще работи коректно.
 
[sql]$date1=time();
mysql_query("DELETE FROM `table_bans` WHERE (`ban_created `+ `ban_length`) < '$date1' AND `ban_length` !=' -1'");[/sql]
Не трябва да събираш стойностите от двете колони :) Ако тръгне дай-точката на s_gerrard :)
 
Хмм ...


Само замести `table` с таблицата ти където са полетата ban_created и ban_length.

PHP:
$vremedel=time();
mysql_query("DELETE FROM `table` WHERE ban_created+ban_length<'$vremedel'");
 
Ами да явно са за триене. Какво прави този код:

Взима кога е създаден банна събира го с дължината му за изтичане и ако сбора им е по-малък от сегашното време го трие.

Пример:

Бан е създаден на 30сек.
Бан изтича след 10сек.

30 + 10 = 40 сек.

40-тата секунда означава, че на нея или след нея трябва да бъде изтрит записа.

Сегашна секунда да речем е 35 секунда.

40<35 //40 е по-голямо от 35 следователно банна за това време не е изтекъл и няма да бъде изтрит.

Но

Сегашна секунда да речрем 50 секунда.
40<50 //40 е по-малко от 50 следователно банна е изтекъл и може да се изтрие записа.

АКО ВСЕ ОЩЕ НЕ СИ РАЗБРАЛ КАК РАБОТИ ЕТО ТАКА:

-Банвам те за 1 ден тоест (86400 секунди).
-Банал съм те на дата (1329529352 секунда от unixtimestampa).

И сега сабирам тези 2 стоиности - тяхният сбор е 1329615752

-Сега почва проверката като взимаме секундите в момента и проверяваме ако секундите в момента са по-големи от сбора на това число което сметнахме - следователно баннът е изтекъл и се трие от базата данни. Но ако не е по-голямо от това число горе в такъв случай не се трие резултата.

Пример:
В момента е 1 329 529 645 числото от сбора е 1 329 615 752.

Следователно щом времето в момента е по-малко от сбора на 2 те числа, записа няма да бъде изтрит.

(това число е сегашната дата)1 329 529 645 < 1 329 615 752 (това число е сбора)

------------------------------

ПО АБСОЛЮТНО СЪЩИЯТ ПРИНЦИП РАБОТИ ЗАЯВКАТА!

PHP:
$vremedel=time();
mysql_query("DELETE FROM `table` WHERE ban_created+ban_length<'$vremedel'");
 
А, да и ако "-1" ти символизира перманентните баннове тогава заявката ще изглежда така:

PHP:
$vremedel=time();
mysql_query("DELETE FROM `table` WHERE ban_created+ban_length<'$vremedel' AND ban_length !=-1 ");
 

Горе