Hej,
Przypuśćmy, że mam bazę danych pewnych aukcji, gdzie trzymam id aukcji oraz datę jej rozpoczęcia (jako czas uniksowy).
Każda aukcja odnawia się co 30 dni, lecz nie zmienia to jej daty rozpoczęcia, i teraz tak - w jaki sposób pobrać datę najbliższego odnowienia?
W PHP zrobiłem to na takiej zasadzie (taki trochę kod na kolanie pisany):
public static function computeDaysToRenew($dateUnix) {
$dateToday = new DateTime(date('Y-m-d H:i:s'));
$dateRenew = new DateTime();
$dateRenew->setTimestamp($dateUnix)->modify('+30 days');
while ($dateRenew->getTimestamp() < $dateToday->getTimestamp()) {
$dateRenew->modify('+30 days');
}
return (int) $dateRenew->diff($dateToday)->format('%d');
}
Lecz nie mam pomysłu na napisanie odpowiedniego zapytania w MySQL - niby mógłbym zrobić jakieś SELECT date_add(from_unixtime(date_begin), interval +30 days) AS date_renew FROM (...)
, lecz to nie przewiduje przypadku, gdy np. aukcja rozpoczęła się pół roku temu.