Вывести данные за 3 последних дня

Тема в разделе "PHP", создана пользователем andrewa, 2 янв 2011.

Статус темы:
Закрыта.
Модераторы: latteo
  1. andrewa

    andrewa

    Регистр.:
    11 янв 2008
    Сообщения:
    171
    Симпатии:
    7
    как вывести с базы MySQL записи именно за 3 последних дня?

    за вчера знаю как:
    PHP:
    $yesterday date('Y-m-d'mktime(date('H'), date('i'), date('s'), date('m'), date('d') - 1date('Y')));
    каков будет код для вывода именно за три последних дня?
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.405
    Симпатии:
    1.185
    Исходя из date('d') - 1
    пробуй date('d') - 3
    UPD: но так не работает
    Правильный код(доработанный из поста ниже:(
    PHP:
    $time=time()- 3600*24*3// последняя цифра задает на сколько дней надо вернутся назад
    $time=date('Y-m-d'$time);
     
  3. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    200
    Симпатии:
    55


    $time=time()-3600*24*3;
    $time=date('Y-m-d H:i:s');
    SELECT * FROM table WHERE `поле даты`>$time
     
  4. propovednik

    propovednik Постоялец

    Регистр.:
    16 май 2008
    Сообщения:
    104
    Симпатии:
    21
    mysql умеет все сам,
    PHP:
    `date` > NOW()-3*24*60*60
     
  5. VandJ

    VandJ

    Регистр.:
    8 апр 2008
    Сообщения:
    318
    Симпатии:
    113
    Как-то так:
    PHP:
    <?php
    $db 
    mysql_connect ("localhost","root","") ;
    mysql_select_db ("БАЗА",$db);
    $result mysql_query ("SELECT * FROM ТАБЛИЦА ORDER BY date DESC",$db);
    $myrow mysql_fetch_array ($result);
    $time strtotime("-2 day");
    $time date("Y-m-d"$time);
    do
    {
    echo 
    "Дата новости" .$myrow['date']."<br>";
    if (
    $myrow['date']==$time) break;
    }
    while (
    $myrow mysql_fetch_array ($result));
    ?>
     
  6. wal

    wal Постоялец

    Регистр.:
    24 мар 2008
    Сообщения:
    89
    Симпатии:
    30
    date('Y-m-d', mktime(date('H'), date('i'), date('s'), date('m'), date('d') - 3, date('Y')));

    mktime сама определить если дата вышла за границы, поэтому ей очень удобно пользоваться...
     
  7. FaLL3N

    FaLL3N Постоялец

    Регистр.:
    4 дек 2006
    Сообщения:
    100
    Симпатии:
    17
    Все намного проще :) /* MySQL 5+*/

    SELECT * from table where `date`/*поле с датой в формате 2011-01-03*/ between DATE_ADD(curdate(), INTERVAL -2 day)/*дата начала*/ and curdate()/*сегодняшняя дата*/;

    Можно и такой селект использовать:
    SELECT * from table where `date`> DATE_ADD(curdate(), INTERVAL -2 day);
    но только при условии что не будет записей "в будущем"

    .
     
  8. nullsab

    nullsab Постоялец

    Регистр.:
    5 июн 2007
    Сообщения:
    65
    Симпатии:
    10
    При этом второй вариант, который показал FaLL3N предпочтительнее, т.к. использует индекс (если он есть, конечно)
     
  9. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Ты не поверишь, можно еще проще:
    Код:
    SELECT * FROM `table` WHERE TO_DAYS(NOW()) - TO_DAYS(`date`) <= 3
    
    и нет ограничений на отсутствие записей "в будущем". А всего то надо было почитать документацию по работе со временем в MySQL :confused:

    Добавлено через 2 минуты
    Он использует поле, а не индекс(и еще не известно какого формата). Пока индекс на поле не поставишь и не проиндексируешь таблицу, поиск по индексу работать не будет.
     
Статус темы:
Закрыта.