изтича/архив

stoqnski

Registered
Здравейте , бих искал да ви попитам за някакъв алгоритъм по следната идея :
Имам таблица в БД-то : `items` ( и вътре съоветно колони id,date,title & и т.н. )
При добавяне чрез PHP на нов запис в тази таблица да записва +60 дена на $data = [d.m.y] т.е. това което буквално искам да се случи е :
Добавям примерен item
той получава $data = днескашната дата
и се записва в "datata" ( в таблицата items)
едновременно с това искам да се записва и някаква друга променлива
примерното $data = [d.m.y] + 60дена един вид , когато изтекат 60дена от днешката дата да се трие записа .
Най-вероятно този алгоритъм е доста тъп , защото даже и не мога да го реализирам понеже нещо в действията ми се губи :D
мм четох , че с CRON JOBS мога да направя там един скрипт на еди си колко време да си изпълнява и т.н. .. не трябва да е с него ...

Искам по някакъв начин като се добавя продукт в БД-то да речем след 60 дена от датата на добавяне да изтича и да се трие ( ако не автоматично , то поне ръчно ) от БД-то ..

Надявам се да сте ме разбрали
П.п. Приемам и готови кодове :D

//хрумна ми , че може да стане на принципа на архива ...
Примерно да излизат продуктите отпреди 2 месеца ( сравняване по date) и да се трият where date = отпреди 2 месеца , обаче пак нямам никаква идея за реализация :D

Направих го така :
<?php
$queryas = "SELECT * FROM obiavi WHERE datata > DATE(NOW())- INTERVAL 1 MONTH" ;
$resultas = mysql_query($queryas) or die (mysql_error());
while ($rowas = mysql_fetch_assoc($resultas)) {
echo "$rowas[ime] <br />";
} ?>
Но вместо INTERVAL 1 MONTH ми го разчита като INTERVAL 1 DAY и не е*ава нито множествено число ни нищо ...
[datata] ми е от формат [d.m.y]
 
stoqnski каза:
Добавям примерен item
той получава $data = днескашната дата
и се записва в "datata" ( в таблицата items)
едновременно с това искам да се записва и някаква друга променлива
примерното $data = [d.m.y] + 60дена един вид , когато изтекат 60дена от днешката дата да се трие записа .
DATEDIFF
[sql]DROP TABLE IF EXISTS items;

CREATE TABLE items(`id` INT AUTO_INCREMENT PRIMARY KEY,
`datata` DATETIME NOT NULL,
`title` text);

INSERT INTO items (datata,title) VALUES(NOW(),'bla bla bla');

DELETE FROM items WHERE DATEDIFF(NOW(),datata)>60;

SELECT * FROM items ORDER BY datata DESC;
[/sql]
 
а не мога ли да работя с текущия формат на datata [d.m.y] ?
и DELETE FROM items WHERE DATEDIFF(NOW(),datata)>60;

60 минути ли е ?
 
stoqnski каза:
а не мога ли да работя с текущия формат на datata [d.m.y] ?
и DELETE FROM items WHERE DATEDIFF(NOW(),datata)>60;

60 минути ли е ?
В дни е.
Може да ползваш всякакви вариации. Идеята е, че не ти е нужно още едно поле в таблицата! Разгледай линка от горния ми пост (MySQL Date and Time functions) : може да ползваш TIMESTAMP вместо DATETIME поле и т.н.
Моя съвет е да записваш датите чрез MySQL ф-я, за да нямаш записи от типа на '0000-00-00' , особенно когато качиш скрипта на хост, където Internal MySQL date format е различен от зададения от теб!
 
Добре , тръгвам по твоя начин :
(ще говоря по подразбиране )
В add.php INSERT (NOW() ... ) в таблица expires
//проверих с пробен запис :
запазило се е в expires в datetime формат :
2013-03-14 19:03:5 за съответното ID ..

така ..

преди да почна с DELETE-товете ще тествам със SELECT :

пробвах така :

<?php
$queryas = "SELECT * FROM obiavi WHERE DATEDIFF(NOW(),expires)>60";
$resultas = mysql_query($queryas) or die (mysql_error());
while ($rowas = mysql_fetch_assoc($resultas)) {
echo "$rowas[ime] <br />";
} ?>

// ime - поле от съответната таблица - просто за визуализация на случващото се ...

Но нищо не се случва , нито текст , нито грешка не ми изкарва ... :(
 

Back
Горе