簡體   English   中英

PHP / MySQL:按時間排序,然后按日期排序

[英]PHP/MySQL: Sort by time, then by date

我偶然發現了一個我認為容易解決的問題,但似乎讓我發瘋了。 所以,我試圖按時間排序一些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輸出是個問題。 所以,現在的輸出是:

2011年10月4日

  • 系統在線並准備就緒。 [08:42 AM]

2011年10月5日

  • 所有系統在線。 [09:42 AM]

  • 維護開始。 [09:43 AM]

  • 系統離線。 [09:44 AM]

我希望輸出是什么:

201110月5日 - 系統離線。 [09:44 AM]

  • 維護開始。 [09:43 AM]

  • 所有系統在線。 [09:42 AM]

2011年10月4日

  • 系統在線並准備就緒。 [08:42 AM]

基本上,我想要按日期分組的所有內容(最新的第一個),我希望最近的時間位於頂部,而不是底部。

這是我的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 } ?>

任何幫助表示贊賞。

謝謝!

只需在ORDER BY中添加一個額外的子句?

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

您可以根據需要對任意數量(或很少)的字段進行排序,甚至可以根據需要對任意表達式進行排序。

將您的查詢更改為

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

要按日期排序,然后在SQL中按時間排序,

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

試試這個:

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

將適用於您的代碼

SELECT * FROM狀態順序按日期(日期)asc,time desc;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM