Работа с дати mysql. Kak?

azsym

New member
Имам една таблица със следното

име, последно-търсене
им1, 21.09.11г. 12:22:41
им2, 18.09.11г. 12:22:41
им2, 15.09.11г. 12:22:41

как да селектирам само редовете за които 'последно-търсене' е по-старо от 2 дни, считано от днешна дата?
 
Re: Работа с дати mysql. Kak?

Не е задължително да ползваш datediff, по-лесния вариант е да си вземеш времето в момента с date() и да си направиш заявка

$predi2dena = date("d.m.y H:i:s", mktime(0, 0, 0, date("m") , date("d")-2, date("Y"))😉;

select * from tablica where 'datata' <= '$predi2dena'

и на полето datata правиш един индекс и си готов : ))
 
Re: Работа с дати mysql. Kak?

Не е задължително да ползваш datediff, по-лесния вариант е да си вземеш времето в момента с date() и да си направиш заявка

$predi2dena = date("d.m.y H:i:s", mktime(0, 0, 0, date("m") , date("d")-2, date("Y"))😉;

select * from tablica where 'datata' <= '$predi2dena'

и на полето datata правиш един индекс и си готов : ))

и на мене това ми изглежда по-лесно. 🙂 ще пробвам.
това, че в датата има 'г' ще го прецака ли?
мерси.
Само за инфо - кой е предпочитания метод - datediff или така?
 
Re: Работа с дати mysql. Kak?

Date няма време, трябва да се ползва DateTime тип.

Лично аз препоръчвам мотода на Jonny, защото понякога датата на базата се различава от датата която е в PHP (системната). Би трябвало да е нелогично, но е така - възможно е просто да е сетнато GMT, докато ако сървъра е в БГ ще има 2 часа разлика 🙂
 
Re: Работа с дати mysql. Kak?

Не е задължително да ползваш datediff, по-лесния вариант е да си вземеш времето в момента с date() и да си направиш заявка

$predi2dena = date("d.m.y H:i:s", mktime(0, 0, 0, date("m") , date("d")-2, date("Y"))😉;

select * from tablica where 'datata' <= '$predi2dena'

и на полето datata правиш един индекс и си готов : ))

Добро решение!
Дадох datediff, защото цялата работа ще извърши mysql-а (тоест php-то ще натовари cpu time-а с една операция по - малко), а и то връща дните като брой:
SELECT `име` FROM _TABLENAME_ WHERE datediff(SYSDATE()-`последно-търсене`)>=2;
 
Последно редактирано:
Re: Работа с дати mysql. Kak?

А може и още по просто и лесно 🙂

Код:
Искаме всичко по-старо от 2 дни от момента на изпълнение на зявката.
select now() - INTERVAL 2 DAY;

Искаме датата с 2 дни след изпълнение на заявката.
select now() + INTERVAL 2 DAY;

Като вече ти казаха какъв тип трябва да е полето ти 🙂
Дори когато поставяш данни в полето можеш да ги поставяш със now().

Keep it simple keep it stupid - KISS 🙂
 
Re: Работа с дати mysql. Kak?

А може и още по просто и лесно 🙂

Код:
Искаме всичко по-старо от 2 дни от момента на изпълнение на зявката.
select now() - INTERVAL 2 DAY;

Искаме датата с 2 дни след изпълнение на заявката.
select now() + INTERVAL 2 DAY;

Като вече ти казаха какъв тип трябва да е полето ти 🙂
Дори когато поставяш данни в полето можеш да ги поставяш със now().

Keep it simple keep it stupid - KISS 🙂

нещо не работи. Това с тип DATE или DATETIME става. При мен е DATETIME.

PHP:
select name from table where DATETIMECOLUMN = now()- INTERVAL 2 DAY;
така ли трабва да бъде.
Сега връща 0 резултати.
 
Re: Работа с дати mysql. Kak?

Нещо и от мен тествано и работи перфектно.

PHP:
$date = date("d-m-Y H:i:s", strtotime( "-7 days"));

$sql = "select * from tablica where `date`>='$dates' AND `date`<='".date("d-m-Y H:i:s")."'";

Забележи, че има and в where клаузата и не го махай в противен случай няма да постигнеш желания от теб резултат дори и полето ти да е индекс или да не е.
В $date = на мястото -7 days съответно можеш да си сложиш колко дни или месеци и тн. като за повече инфо за функцията strtotime(); можеш да видиш в php.net .
По този начин може и да не ползваш полето като дата а като обикновен varchar.
 
Последно редактирано:
Re: Работа с дати mysql. Kak?

Можеш да опиташ така:

Код:
SELECT * FROM search_log 
    WHERE search_dt <= DATE_ADD(NOW(), INTERVAL -2 DAY);

Поздрави!
 

Back
Горе