Mysql дата

Hous

Registered
Понеже имам към 100ина новини със различни дати, но за саписани от типа:
2013-11-12 17:25:05

и се чудя как сега да направя последните новини от деня/седмицата/месеца

Dали е по-удачно да се "конвертират" тези стойности в timestamp
1384277105

При този формат които са в момента записите, може ли да се направи това, което ми трябва или ще трябва да се конвертират, това ми е въпроса?
 
Лесно е да се запишат датите така в ДБ, ама после трудно се обработват? Винаги си ги записвай в unixtimestamp.

Сега може да пуснеш две заявки:

- SELECT за всички дати.
- UPDATE за всички дати.

Като ъпдейта ще представлява конвертираните дати в уникс. Те са доста по - лесни за обработка и много гъвкави.

PHP:
    $date = trim($date);

     $date = explode(".", $date);
     $date = array_filter($date);
    
     $daysort = (int) $date[0];
     $monthsort = (int) $date[1];
     $yearsort = (int) $date[2];

     $uDate = mktime(0, 0, 0, $monthsort, $daysort, $yearsort);

Ти може да си го допълниш за часовете. Забележи само, че месеца е първи - това не е грешка а така е направена функцията.

Първо тествай резултатите дали си съответстват, след това UPDATE към ДБ.

А полето в което записваш unixtimestamp си го направи (int) 35.
 
Знам, аз винаги ползвам timestamp въпроса е че това е една от първите ми таблици за сайт и тогава си ги пишех с цел повече да не ги променям, по-късно осъзнах че е по-гъвкаво да се записват във unix стойности.
И за това пуснах темата дали е по-удачно да ги конвертирам, защото реално по-различен вид от този които съм пуснал няма да ми трябва, единственото което ми се налага е да направя някакво отсяване и знам как става то , само ако са в timestamp
Сега ще тествам и ако вс е ок, +1 за помощта :)
 
Не е нужно да се конвертира.

[sql]
UNIX_TIMESTAMP( STR_TO_DATE( `post_date`, '%d' ) ) = UNIX_TIMESTAMP( STR_TO_DATE( NOW(), '%d' ) )
[/sql]

В случая трябва да изкара всички постове от днес.


Или ползвай MONTH(), DAY(), WEEK() и т.н.
 
eddyy93 каза:
Лесно е да се запишат датите така в ДБ, ама после трудно се обработват? Винаги си ги записвай в unixtimestamp.

Грешка :)

Полето трябва да е с тип DATETIME и можеш директно да кажеш на mysql това:

[sql]SELECT * FROM `table` WHERE `created_date` >= NOW() - INTERVAL 1 DAY ORDER BY `created_date` DESC[/sql]

Можеш и да ги сравняваш без проблем:
[sql]SELECT * FROM `table` WHERE `created_date` >= '2013-11-10 22:30:00'[/sql]

Мисля, че е по-лесно от смятане на timestamp-ове. :)
 

Back
Горе