PHP / MySQL: сортировка по времени, затем по дате

#php #mysql #sql #sorting

#php #mysql #sql #сортировка

Вопрос:

Я наткнулся на проблему, которую, как я думал, будет легко решить, но, похоже, она сводит меня с ума. Итак, я пытаюсь отсортировать некоторые записи MySQL по времени, а затем отсортировать «группировать» их по дате. Например, вот мои данные MySQL:

  ---- ------------ ---------- --------------------------- -------- 
| id | date       | time     | entry                     | status |
 ---- ------------ ---------- --------------------------- -------- 
| 21 | 2011-10-05 | 09:42:06 | All systems online.       |      1 |
| 22 | 2011-10-05 | 09:43:09 | Maintenance starting.     |      2 |
| 23 | 2011-10-04 | 08:42:06 | Systems online and ready. |      1 |
| 24 | 2011-10-05 | 09:44:30 | Systems are offline.      |      0 |
 ---- ------------ ---------- --------------------------- -------- 
  

Итак, запрос, который я использую для сортировки всего:

SELECT * FROM status order by date ASC;

Что дает следующие результаты:

  ---- ------------ ---------- --------------------------- -------- 
| id | date       | time     | entry                     | status |
 ---- ------------ ---------- --------------------------- -------- 
| 21 | 2011-10-05 | 09:42:06 | All systems online.       |      1 |
| 22 | 2011-10-05 | 09:43:09 | Maintenance starting.     |      2 |
| 24 | 2011-10-05 | 09:44:30 | Systems are offline.      |      0 |
| 23 | 2011-10-04 | 08:42:06 | Systems online and ready. |      1 |
 ---- ------------ ---------- --------------------------- -------- 
  

Проблема с выводом PHP. Итак, вывод ПРЯМО СЕЙЧАС:

4 октября 2011

  • Системы подключены и готовы. [08:42]

5 октября 2011

  • Все системы в сети. [09:42]

  • Начинается обслуживание. [09:43]

  • Системы отключены. [09:44]

Каким я ХОЧУ, чтобы результат был:

5 октября 2011 г. — Системы отключены. [09:44]

  • Начинается обслуживание. [09:43]

  • Все системы в сети. [09:42]

4 октября 2011

  • Системы подключены и готовы. [08:42]

В принципе, я хочу, чтобы все было сгруппировано по дате (последней первой), и я хочу, чтобы самое последнее время было вверху, а не внизу.

Вот мой PHP-код:

 function getUpdates() {
    global $db;
    $updchk = "";
    $entries = $db->GetAll("SELECT * FROM status order by date DESC;");
    if (!$entries) { ?>
        <p>No entries in the database, yet.</p>
  <?php } else
    foreach ($entries as $entry) {
        if (ConvertDate($entry['date']) != $updchk) { ?>
            <h4><?php echo ConvertDate($entry['date']); ?></h4>
            <p><?php echo $entry['entry']; ?><span class="timestamp"> [<?php echo strftime('%I:%M %p', strtotime($entry['time'])); ?>]</span></p>
            <?php $updchk = ConvertDate($entry['date']); ?>
        <?php } else { ?>
            <p><?php echo $entry['entry']; ?><span class="timestamp"> [<?php echo strftime('%I:%M %p', strtotime($entry['time'])); ?>]</span></p>
        <?php }
    } ?>
<?php } ?>
  

Любая помощь приветствуется.

Спасибо!

Ответ №1:

просто добавьте дополнительное предложение в ORDER BY?

 SELECT ...
FROM status
ORDER BY `date` DESC, `time` DESC
  

Вы можете сортировать по любому количеству (или нескольким) полей, сколько захотите, даже по произвольным выражениям, если это необходимо.

Ответ №2:

измените свой запрос на

 SELECT * 
FROM status 
order by `date` desc, `time` desc;
  

Ответ №3:

Упорядочить по дате, а затем по времени в SQL,

 SELECT * FROM status ORDER BY date DESC, time DESC;
  

Ответ №4:

попробуйте это:

 SELECT * FROM `status` ORDER BY `date`, `time` DESC 
  

Ответ №5:

 SELECT * FROM `status` ORDER BY `date` DESC, `time` DESC
  

будет работать для вашего кода

Комментарии:

1. скажите нам, пожалуйста, в чем разница между вашим ответом и одним уже принятым, правильным ответом, опубликованным ГОД НАЗАД !!!

Ответ №6:

ВЫБЕРИТЕ * ИЗ порядка состояния по ДАТЕ (дате) asc, времени desc;