MySql - порядок по дате, а затем по времени - PullRequest
9 голосов
/ 26 июля 2010

У меня есть таблица с двумя полями «datetime»: «eventDate» и «eventHour». Я пытаюсь сделать заказ по 'eventDate', а затем по 'eventHour'.

Для каждой даты у меня будет список событий, поэтому я буду заказывать по дате, а затем по времени.

спасибо !!

Ответы [ 8 ]

23 голосов
/ 26 июля 2010

Я не уверен, есть ли какой-то скрытый смысл в вашем вопросе, но стандартный способ сделать это, кажется, подходит:

... order by eventDate, eventHour

Это дает вам часы в пределах дат, как:

Feb 15
    09:00
    12:00
    17:00
Feb 23
    22:00
    : :

Если у вас есть эти два поля как real datetime, ваша схема испорчена.У вас должно быть поле date для даты и time или целое поле для часа.

Вы можете объединить оба в одно поле datetime, но вы должны сбалансироватьэто против неэффективности выполнения функций для каждой строки в ваших операторах select, если вы хотите разделить их.Обычно лучше разделять поля, если вы собираетесь использовать их отчетливо.

Если вам do необходимо использовать функции для каждой строки, вы можете использовать:

date(datetime_column)
time(datetime_column)

для извлечения только date и time компонентов datetime.

12 голосов
/ 03 июня 2013

Если вы хотите сначала перечислить данные как последнюю дату события, если существуют записи с той же датой, то данные будут отсортированы по времени, то есть сначала по первому времени ,,

Вы можете попробовать, как показано ниже

select * from my_table order by eventDate DESC, eventHour DESC
3 голосов
/ 26 июля 2010

ли

select * from my_table order by eventDate, eventHour

не работает?

3 голосов
/ 26 июля 2010

Почему бы не сохранить оба значения eventDate и eventHour в одном поле, если они оба DateTime?

Чтобы получить то, что вы хотите с текущей схемой, вы можете сделать это:

SELECT * FROM table 
  ORDER BY 
    EXTRACT(YEAR_MONTH FROM eventDate),
    EXTRACT(DAY FROM eventDate),
    EXTRACT(HOUR FROM eventHour)
1 голос
/ 23 марта 2014

Упорядочить по идентификатору в порядке убывания.

<?php $sql = "SELECT * FROM posts ORDER BY id DESC?>

Это должно работать

1 голос
/ 26 июля 2010

Вы можете заказать столько, сколько вам нужно, просто используйте список.Он упорядочится по первому значению, затем по второму ... и т. Д.

  SELECT *
    FROM table
ORDER BY eventDate, eventHour

Если у вас есть два поля даты и времени, вы можете получить только дату или час, используя что-то вроде:

    SELECT *
      FROM table
  ORDER BY DATE_FORMAT(eventDate, '%d'), DATE_FORMAT(eventHour, '%h')
0 голосов
/ 24 сентября 2015

Это лучший способ, который сработал для меня, просто преобразовать дату в число дней с помощью функции в_дней (дата) и в количество секунд с помощью функции TIME_TO_SEC (время) , пример:

SELECT 
    nv.destac,
    DATE_FORMAT(nv.date_nov , '%d-%m-%Y %T') as date_order, 
    TO_DAYS(nv.date_nov) as days,
    TIME_TO_SEC(TIME(nv.date_nov)) as seconds

FROM 
    newsviews nv
WHERE 
     nv.active
ORDER BY 
      nv.destac DESC,  days DESC, seconds DESC ;

Эстатика ме-ханиумов, функционирующих в режиме реального времени, в т.ч. конвертируемых и рассчитанных на фунции TO_DAYS (fecha) в связи сКантидад де Сегундос с функцией TIME_TO_SEC (tiempo)

SELECT 
    nv.destacar,
    DATE_FORMAT(nv.fecha_nov , '%d-%m-%Y %T') as fecha_orden, 
    TO_DAYS(nv.fecha_nov) as dias,
    TIME_TO_SEC(TIME(nv.fecha_nov)) as segundos

FROM 
    novedades nv
WHERE 
     nv.activa
ORDER BY 
      nv.destacar DESC,  dias DESC, segundos DESC ;
0 голосов
/ 24 февраля 2012

Во-первых, это плохая практика - сохранять дату и время в разных полях.

В любом случае, если вы сохраняете дату / время в правильном формате. (то есть: формат даты гггг-мм-дд и время чч: сс)

Сначала необходимо объединить дату и время, чтобы получить значение даты и времени. Технически говоря, вы можете сделать ORDER BY ON для поля Datetime, но это снова не очень хорошая практика. В нашем случае, когда мы запускаем CONCAT, это преобразуется в строку, поэтому набор результатов будет неправильным. Таким образом, вам нужно преобразовать его в UNIX TIMESTAMP для выполнения заказа.

Рекомендуется запускать UNIX_TIMESTAMP в поле даты и времени перед предложением ORDER by.

Вы можете использовать следующий запрос.

ВЫБРАТЬ столбец1, столбец2, UNIX_TIMESTAMP (CONCAT (event_date, '', event_time)) в качестве метки unixtimestamp из таблицы Заказ по unixtimestamp desc;

Примечание: (Между функцией event_date и event_time есть пробел в функции CONCAT. Здесь она отображается неправильно.)

...