PHP: $resultClassified = mysql_query("SELECT * FROM " . $dbPrefix . "_classifieds WHERE classified_date_add = (time(classified_date_add) + 2592000) - (" . $settings['classifieds_auto_reminder'] . " * 86400) ORDER BY classified_id DESC", $_DB);
Есть поле classified_date_add где храниться дата добавления записи 2011-09-06 23:13:32, надо сделать выбор за 3 дня раньше, если к 2011-09-06 23:13:32 прибавить 30 дней. Наверно проще и правильнее сделать средствами MYSQL DATE_SUB?
проще сделать временной меткой. временную метку можно получить функцией time(); потом от этой временной метки отнимать или прибавлять к ней секунды. Например при добавлении записи в базу временная метка была 1234567890. Что бы получить 30 дней после неё достаточно сделать так PHP: $row = mysql_query("SELECT * FROM `таблица` WHERE `твоё условие`"); $row = mysql_fetch_object($row); date('d-M-Y (H:i:s)', $row->time+3600*24*30);
Переделывать базу я не могу, слишком много записей. Мне надо делать запрос одной записи последней, `твоё условие` - именно по временной метке.
Есть таблица объявлений, каждое объявление имеет поле с датой, когда оно было добавлено в базу. Например добавлено оно 2011-09-06 23:13:32 на 30 дней, надо чтобы приходило пользователю оповещание на эмайл за 3 дня до 2011-10-04. Тип поля в базе CURRENT_TIMESTAMP.
Ну как бы временную метку получить можно, Не знаю насколько велосипед, но я добился так: PHP: <?php mysql_connect("localhost", "root", "dimka"); mysql_select_db("db_one"); mysql_query("SET NAMES utf8"); $result = mysql_query("SELECT * FROM `table`"); $result = mysql_fetch_object($result); $date_time = explode(" ", $result->timestamp); $date = $date_time[0]; $date_arr = explode("-", $date); $time = $date_time[1]; $time_arr = explode(":", $time); print_r($date_arr); print_r($time_arr); $rrr = mktime($time_arr[0], $time_arr[1], $time_arr[2], $date_arr[1], $date_arr[2], $date_arr[0]); echo $rrr.'<br>'; /************************ CREATE TABLE `db_one`.`table` ( `id` INT( 5 ) NOT NULL AUTO_INCREMENT , `title` VARCHAR( 50 ) NOT NULL , `timestamp` TIMESTAMP( 30 ) NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY ( `id` ) ) ENGINE = MYISAM ; ALTER TABLE `table` CHANGE `title` `title` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL INSERT INTO `db_one`.`table` ( `id` , `title` , `timestamp` ) VALUES ( NULL , 'Пробная запись 1', CURRENT_TIMESTAMP ), ( NULL , 'Пробная запись 2', CURRENT_TIMESTAMP ************************/ [/code] Может кто попроще подскажет. Это одевание штанов через голову конечно.
Описание задачи не лучше, чем в первый раз Вообще, interval Вам в помощь. Что-то вроде: select date(датавремя_добавления_записи) = curdate() - interval 27 day; выберет все записи с датой добавления за 27 дней до текущей