За последние 24 часа нас посетили 55307 программистов и 1725 роботов. Сейчас ищут 1086 программистов ...

Как найти самую приближенную дату

Тема в разделе "PHP для новичков", создана пользователем Intrerio, 7 июл 2016.

  1. Intrerio

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

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    Вот собственно задача.
    Есть БД mysql. В ней есть таблица:
    id col1 col2 date
    1 100 200 2015-01-01
    2 200 300 2016-01-02
    3 300 400 2017-02-03

    А теперь нужно чтоб скрипт пробежался по базе и сравнил даты с сегодняшней и выдал результат самой приближенной даты но не позже чем сегодня (тоесть 3 строка нам не подходит). С примера выше видно что нужна вторая строка. Поможете?
    --- Добавлено ---
    Пришел к такому вариант:
    PHP:
    1. $today=date('Y-m-d');
    2. $sel = mysql_query("SELECT * FROM `oscpv_ins_summ` WHERE date_start<'".$today."' ORDER BY date_start DESC");
    3. $res = mysql_fetch_array($sel);
    Работает но мне кажется что сильно намудрено
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    А что тут мудрёного? Хорошее решение, если даты только меньше могут быть сегодняшней.
     
  3. Intrerio

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

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    Ну вродь все работает отлично, проверил несколько раз. Просто думал может есть более популярное решение. Всем спасибо.
     
  4. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Есть решение перейти на свежии функции запросов к базе данных mysqli либо же pdo
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Запрос рабочий, но добавь LIMIT 1 чтобы не заставлять сервер делать лишнюю работу.

    Также, если ты в результате используешь только найденную дату, то и укажи явно поле даты вместо *.

    Также перестань использовать mysql_fetch_array, т.к. он фактически делает двойную работу: одни и те же данные в массиве встречаются дважды. Попробуй однажды var_dump-нуть что там на выходе…

    … И вообще от mysql_* функций пора отказываться. ))) Они только в старых книжках и устаревшем коде встречаются. Есть mysqli и PDO.

    Ну и вот такой вариант имей в виду
    Код (Text):
    1. SELECT MAX(datefield) FROM mytable WHERE datefield < :d
     
    askanim и mahmuzar нравится это.
  6. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    а чё как то можно не по два вывести, я и пдо вывожу запрос, у меня в результе массив с двойными данными. Как сделать не с двойными кинь что нибудь иль пример или ман почитать, просто не встречал что-то
    --- Добавлено ---
    Можно потом функцией убрать двойные значения. Но зачем, он всё равно их выводит, а потом ещё и уберает, зачем громадить код, я просто вывожу то что нужно и всё.
     
  7. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    А ты не смотришь в доках функции которые используешь?
    https://php.ru/manual/pdostatement.fetchall.html
    PHP:
    1. <?php
    2. $stmt = $this->db->prepare('SELECT title, FMarticle_id FROM articles WHERE domain_name =:domain_name');
    3.             $stmt->bindValue(':domain_name', $domain);
    4.             $stmt->execute();
    5.             $article_list = $stmt->fetchAll(PDO::FETCH_ASSOC);
    6. ?>
    --- Добавлено ---
    https://php.ru/manual/pdostatement.fetch.html
     
    #7 mahmuzar, 9 июл 2016
    Последнее редактирование: 9 июл 2016
    askanim нравится это.
  8. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @mahmuzar Да я так мельком, чёто не задумывался даже, спасибо. Учту.
     
  9. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Не за что.