簡體   English   中英

連接兩個表,然后按日期排序,但將兩個表合並

[英]Join two tables, then Order By date, BUT combining both tables

好吧,我試圖弄清楚為什么我不明白如何做到這一點...

我有兩個表:

  • 發票

    • ID
    • 用戶身份
    • 日期
  • 付款方式

    • ID
    • 用戶身份
    • 日期

因此,這里的目標是連接兩個表,其中userID匹配我想要的任何內容-然后返回按日期排序的所有內容(最新的在頂部)。 但是,由於每個表中都有一個日期字段,所以我不確定MySQL將如何處理事情……會自動按兩個日期排序嗎? 這就是我在想...

"SELECT DISTINCT *
            FROM invoices,payments
            WHERE {$userID} = invoice.userID
            OR {$userID} = payments.userID
            ORDER BY date DESC";

但是,對我來說,開始變得很清楚,也許這甚至不是對join命令的正確使用……也許我只需要單獨獲取每個表上的所有數據,然后嘗試使用PHP對其進行排序? 如果那是更好的方法,那么在保持所有行數據不變的情況下進行這種DATE排序的好方法是什么?

我應該補充一下,unix時間戳(即“日期”的存儲方式)內的TIME不可忽略-它應按日期和時間排序。

謝謝大家

如果兩個表的列相同,則可以使用UNION

SELECT X.*
  FROM ( SELECT `id`,
                `userID`,
                 'INVOICE' AS PTYPE
                 `amount`,
                 `date`
            FROM `invoices`
           WHERE {$userID} = userID  
          UNION
          SELECT `id`,
                 `userID`,
                 'PAYMENT' AS PTYPE
                 `amount`,
                 `date`
            FROM `payments`
           WHERE {$userID} = userID  
        ) X
 ORDER BY X.`date`

編輯

閱讀有關UNIONS的MySQL手冊的相關部分。 有這種措辭的其他方式,但是這是我喜歡的風格-它應該是明確的任何人讀取ORDER BY子句適用於UNION 兩側的結果。 粗心編寫的UNION-即使使用ORDER BY-仍可能使最終結果集的順序不確定。

PTYPE的目的是該查詢返回一個稱為PTYPE的額外列,該列指示每一行是INVOICE還是PAYMENT...。 它來自兩個表中的哪個。 它不是強制性的,但在工會中通常很有用

因為您有兩個相同的名為date的字段,所以MySQL將不知道您要按哪個字段排序。

"SELECT DISTINCT *
            FROM invoices,payments
            WHERE {$userID} = invoice.userID
            OR {$userID} = payments.userID
            ORDER BY invoices.date, payments.date DESC";

這將按發票日期排序,然后按付款日期排序(如果您要查找的是該日期)

如果您的數據提示是DateTimestamp或任何相關內容,則SGBD會正確排序。 如果那是您的要求。

但是,如果數據類型為String,那么即使存儲日期,它也不會按照您想要的方式排序。

暫無
暫無

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

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