簡體   English   中英

如何從多個1張桌子中按最新記錄排序

[英]How can I order by the newest record from more 1 one table

我有3個項目的活動。 查看,頂和評論。 我想根據最新活動以及在每個項目中完成的活動獲取項目列表。

我試圖為多個字段分配一個別名,並按以下順序使用它...但是失敗了...

我怎樣才能做到這一點?

SELECT item_name, item_view_date AS date, item_like_date AS date, item_comment_date AS date
FROM item 
LEFT JOIN item_like ON like_item_id = item_id 
LEFT JOIN item_comment ON comment_item_id = item_id 
LEFT JOIN item_view ON view_item_id = item_id 
GROUP BY item_id 
ORDER BY date

您可以使用MySQL GREATEST()函數返回所提供的最大元素:

SELECT item_name, MAX(item_view_date) AS date1, MAX(item_like_date) AS date2, MAX(item_comment_date) AS date3
FROM item 
LEFT JOIN item_like ON like_item_id = item_id 
LEFT JOIN item_comment ON comment_item_id = item_id 
LEFT JOIN item_view ON view_item_id = item_id 
GROUP BY item_name
ORDER BY GREATEST(COALESCE(date1,date2,date3),
                  COALESCE(date2,date1,date3),
                  COALESCE(date3,date1,date2))

如您所見,我在每個MAX(date)上都添加了MAX(date) ,因為您沒有指定聚合函數就可以加入並使用GROUP BY子句。 通常,必須在group by子句中指定每個列,或者使用聚合函數。

然后是COALESCE()部分,因為您要進行LEFT連接,所以可能會有NULL值,因此-使用COALESCE()消除空值。

暫無
暫無

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

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