我有3项活动。查看,赞和评论。我希望根据最新活动获得项目列表,并在每个项目中完成哪些活动。
我尝试为多个字段分配一个别名,并按顺序使用它......但它失败了......
我怎样才能实现这个目标?
setTimeout
答案 0 :(得分:3)
您可以使用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)
,因为您在没有指定聚合函数的情况下继续加入并使用GROUP BY
子句。通常必须在group by子句或聚合函数中指定每列。
然后有COALESCE()
部分,因为您LEFT
加入,可以有NULL
个值,因此 - 使用COALESCE()
来消除空值。