#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;