За последние 24 часа нас посетили 62956 программистов и 1748 роботов. Сейчас ищут 734 программиста ...

Помогите сделать правильно запрос в базу

Тема в разделе "Прочие вопросы по PHP", создана пользователем ng0d, 9 сен 2011.

  1. ng0d

    ng0d Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    100
    Симпатии:
    0
    Адрес:
    Латвия
    PHP:
    1. $resultClassified = mysql_query("SELECT * FROM " . $dbPrefix .
    2.             "_classifieds WHERE classified_date_add = (time(classified_date_add) + 2592000) - (" .
    3.             $settings['classifieds_auto_reminder'] . " * 86400) ORDER BY classified_id DESC",
    4.             $_DB);
     
  2. ng0d

    ng0d Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    100
    Симпатии:
    0
    Адрес:
    Латвия
    Интересует именно вот этот момент time(classified_date_add).
     
  3. ng0d

    ng0d Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    100
    Симпатии:
    0
    Адрес:
    Латвия
    Есть поле classified_date_add где храниться дата добавления записи 2011-09-06 23:13:32, надо сделать выбор за 3 дня раньше, если к 2011-09-06 23:13:32 прибавить 30 дней. Наверно проще и правильнее сделать средствами MYSQL DATE_SUB?
     
  4. dimka3210

    dimka3210 Активный пользователь

    С нами с:
    17 июн 2010
    Сообщения:
    55
    Симпатии:
    0
    Адрес:
    Брянск
    проще сделать временной меткой.
    временную метку можно получить функцией time();
    потом от этой временной метки отнимать или прибавлять к ней секунды.
    Например при добавлении записи в базу временная метка была 1234567890.
    Что бы получить 30 дней после неё достаточно сделать так
    PHP:
    1. $row = mysql_query("SELECT * FROM `таблица` WHERE `твоё условие`");
    2. $row = mysql_fetch_object($row);
    3. date('d-M-Y (H:i:s)', $row->time+3600*24*30);
    4.  
     
  5. ng0d

    ng0d Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    100
    Симпатии:
    0
    Адрес:
    Латвия
    Переделывать базу я не могу, слишком много записей. Мне надо делать запрос одной записи последней, `твоё условие` - именно по временной метке.
     
  6. dimka3210

    dimka3210 Активный пользователь

    С нами с:
    17 июн 2010
    Сообщения:
    55
    Симпатии:
    0
    Адрес:
    Брянск
    немножко не понятно
     
  7. ng0d

    ng0d Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    100
    Симпатии:
    0
    Адрес:
    Латвия
    Есть таблица объявлений, каждое объявление имеет поле с датой, когда оно было добавлено в базу. Например добавлено оно 2011-09-06 23:13:32 на 30 дней, надо чтобы приходило пользователю оповещание на эмайл за 3 дня до 2011-10-04. Тип поля в базе CURRENT_TIMESTAMP.
     
  8. dimka3210

    dimka3210 Активный пользователь

    С нами с:
    17 июн 2010
    Сообщения:
    55
    Симпатии:
    0
    Адрес:
    Брянск
    Ну как бы временную метку получить можно,
    Не знаю насколько велосипед, но я добился так:
    PHP:
    1.  
    2. <?php
    3. mysql_connect("localhost", "root", "dimka");
    4.     mysql_select_db("db_one");
    5.         mysql_query("SET NAMES utf8");
    6.             $result = mysql_query("SELECT * FROM `table`");
    7.                 $result = mysql_fetch_object($result);
    8.                 $date_time = explode(" ", $result->timestamp);
    9.                     $date = $date_time[0];
    10.                         $date_arr = explode("-", $date);
    11.                     $time = $date_time[1];
    12.                         $time_arr = explode(":", $time);
    13.                     print_r($date_arr);
    14.                     print_r($time_arr);
    15.                 $rrr = mktime($time_arr[0], $time_arr[1], $time_arr[2], $date_arr[1], $date_arr[2], $date_arr[0]);
    16.                 echo $rrr.'<br>';
    17.                
    18. /************************
    19. CREATE TABLE `db_one`.`table` (
    20. `id` INT( 5 ) NOT NULL AUTO_INCREMENT ,
    21. `title` VARCHAR( 50 ) NOT NULL ,
    22. `timestamp` TIMESTAMP( 30 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ,
    23. PRIMARY KEY ( `id` )
    24. ) ENGINE = MYISAM ;
    25.  
    26. ALTER TABLE `table` CHANGE `title` `title` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
    27.  
    28. INSERT INTO `db_one`.`table` (
    29. `id` ,
    30. `title` ,
    31. `timestamp`
    32. )
    33. VALUES (
    34. NULL , 'Пробная запись 1',
    35. CURRENT_TIMESTAMP
    36. ), (
    37. NULL , 'Пробная запись 2',
    38. CURRENT_TIMESTAMP
    39. ************************/
    40.  
    [/code]
    Может кто попроще подскажет. Это одевание штанов через голову конечно.
     
  9. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Описание задачи не лучше, чем в первый раз ;)

    Вообще, interval Вам в помощь. Что-то вроде:
    select date(датавремя_добавления_записи) = curdate() - interval 27 day;
    выберет все записи с датой добавления за 27 дней до текущей