За последние 24 часа нас посетил 15861 программист и 1554 робота. Сейчас ищут 869 программистов ...

Как правильно отсортировать данные по дате?

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

  1. Jeick9

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

    С нами с:
    18 янв 2011
    Сообщения:
    20
    Симпатии:
    0
    Здравствуйте.
    Подскажите пожалуйста как отсортировать и сделать выборку по дате. Формат даты в БД: 22.10.2015
    Пробою так:
    Код (PHP):
    1. $check=mysql_query("SELECT * FROM web ORDER BY date ASC"); 
    Но, так сортировка выполняется не по целой дате, а по первому значению. Подскажите пожалуйста как правильно задать формат даты для сортировки?
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    Тип поля с датой не должен быть текстовым. Есть DATE, DATETIME и TIMESTAMP. Иногда бывает INT в котором хранится unix timestamp. Любой вариант лучше чем varchar для даты!!!11111111111111111111111111111111

    Всё, что относится к "формату", это про Представление данных, а не про хранение. Ты можешь сделать любой формат уже при выводе. Хранить дату надо как дату. Тогда с сортировкой не будет проблем.

    viewtopic.php?f=20&t=50838
     
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Я за таймстампы. Просты как сапог, позволяют "естественным" образом сравнивать, складывать, вычитать, делить любые временные метки. Умножать не советую, int не настолько жирен.
     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    А я просто за счастье всего человечества ))) Не фанат ничего, реалист и обыватель.

    Про timestamp надо помнить, что это 4х байтовое время unix. Диапазон c 1970го по 2038.
     
  5. Jeick9

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

    С нами с:
    18 янв 2011
    Сообщения:
    20
    Симпатии:
    0
    Спасибо. Нашел такое решение:
    Код (Text):
    1. mysql_query("SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date,url FROM web ORDER BY date DESC");
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    Ну почему бы и нет. Если тип исправлен на реальную дату и если Модель и Представление идут вперемешку…
    Такие вещи стоит пояснять. Иначе непонятно в чем здесь "решение".

    Добавлено спустя 18 минут 35 секунд:
    p.s. пробоу, пробывать выдает украинцев )
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Это на 32-битных машинах. На 64-битных веселее. Ну и слухи ходют, что расширят до лонга.
     
  8. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    Ставки делать не буду, но читал, что mysql timestamp полюбому 4 байта, независимо от платформы.
     
  9. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    минимально возможная дата 13 декабря 1901 года, 20:45:52 UTC
     
  10. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    https://dev.mysql.com/doc/refman/5.0/en/datetime.html
    Добавлено спустя 1 минуту 2 секунды:
    в доке по v5.7 это место не изменилось )
     
  11. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    да я не о мускуле конкретно, а вообще о 4-байтах)
     
  12. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    а я о конкретном типе MySQL, чтобы кто-нибудь прочитав ваше сообщение, не понял вас неправильно.

    в 4х байтах помещается 2млрд с чуточкой значений. если время считается в секундах, никак невозможно дотянуть с 1901г до наших дней. так откуда ваши цифры?

    update:
    вероятно знаковое целое позволяет расширить диапазон. но попробуйте вывести echo date('Y-m-d', -1) в php или SELECT FROM_UNIXTIME(-1). Это запредельные значения.