За последние 24 часа нас посетили 47770 программистов и 1729 роботов. Сейчас ищут 660 программистов ...

Вопрос с сортировкой по дате не стандартный

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

  1. drey19061984

    drey19061984 Новичок

    С нами с:
    23 янв 2016
    Сообщения:
    88
    Симпатии:
    0
    вопрос такой - в поле data (оно обычное VARCHAR а не DATE) в БД даты хранятся в формате - 01.03.16,25.01.15, если делаю сортировку выборки из БД так
    Код (PHP):
    1. ORDER BY data DESC
    то он сортирует только по первому значению поля т.е. "01" затем "25" а не по всей дате т.е. на выходе получается:
    01.03.16
    25.01.15
    а не
    25.01.15
    01.03.16
    подскажите пожалуйста как сделать????
    p.s.:может можно както столбец data c данными например 01.03.16 - разбить на 01, 03, 16, и указать параметры сортировки день/месяц/год?

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  2. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Преобразуйте в DATE, DATETIME или TIMESTAMP, и всё будет нормально. Зачем даты хранить varchar? В привычный нам формат преобразовать не составляет труда, и это делается при выводе
    Код (PHP):
    1. <?= date("d.m.Y", strtotime($row['date']); ?>
     
  3. drey19061984

    drey19061984 Новичок

    С нами с:
    23 янв 2016
    Сообщения:
    88
    Симпатии:
    0
    - объясняю на пальцах - это даты статьей спарсенных программой DATACOL (объясняю почему именно программой - т.к. будет в итоге до 150 сайтов с новостями поэтому и проще делать с ее помощью, а не писать 150 скпритов парсинга новостей под каждый сайт) - которая и делает парсинг контента по настраиваемым шаблонам, максимум к какому виду можно привести выгружаемую инфу для поля data из DATACOL это 01.03.16, но при этом БД не сортирует по дате нормальным образом, а разбить на 3 колонки Дату через программу не представляется возможным, поэтому и спрашиваю как можно разбить инфу из поля data, потом как-то опять собрать в массив чтобы отсортировать по убыванию даты и чтоб не потерялась другая инфа - url и title

    вопрос как можно написать скрипт например для того чтоб создавалась временная таблица с исправленными датами т.е. (дата, урл, тайтл) как обычно в БД 2016-12-15 - Временная таблица появляется только когда пользователь выходит на эту страницу
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Из-за парсинга могут не помочь, хотя всё возможно.
     
  5. freelsd

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

    С нами с:
    12 апр 2015
    Сообщения:
    63
    Симпатии:
    0
    Проще всего будет преобразовывать при выборке примерно так:
    Код (PHP):
    1. select STR_TO_DATE(data, '%d.%m.%Y') as d  from test order by d desc
    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Объясняю на пестиках и тычинках: алгоритм сортировки не зависит от происхождения данных. Даты будут сортироваться нормально, а не как кусок дерьма, если ты их будешь хранить правильно — как даты [внезапно™].

    Не стоит здесь хвастаться парсингом и при этом демонстрировать невежество как программист. Ты скрипт-кидди, а это не доблесть.

    Добавлено спустя 22 минуты 47 секунд:
    Скопировать записи в таблицу с правильной сруктурой можно конструкцией INSERT…SELECT…. При этом в таблице-получателе поля с датой типа DATE, а в select в соответствующих позициях делаешь str_to_date() от кривых строк.