MySQL按另一个表的最后一行排序

时间:2015-12-10 18:00:33

标签: mysql sql-order-by

我有2个表,我想要获取表A的内容,但是从表B的值中排序。我按3个值排序(solve,reply_date然后是date)。但我的问题是它没有从表B中取出最后一行,所以结果不是我所期望的。这是我目前的询问。

SELECT user_tickets.user_ticket_id, user_tickets.user_id, solved, subject, user_tickets.date AS date, user_tickets_replies.date AS reply_date
FROM user_tickets 
INNER JOIN user_tickets_replies ON user_tickets.user_ticket_id=user_tickets_replies.user_ticket_id && user_tickets.user_id = user_tickets_replies.user_id 
GROUP BY user_tickets.user_ticket_id 
ORDER BY solved ASC, reply_date DESC, date DESC
LIMIT 200

如何从user_tickets_replies获取LAST reply_date?

3 个答案:

答案 0 :(得分:0)

如果我理解正确,你会有很多门票,其中一些门票有多个回复。您希望按最新(最新)reply_date排序,但您发现排序不正确。

我可以通过两种方式来解决这个问题,具体取决于您是希望查询返回给定故障单的所有reply_date,还是仅返回最近的故障。第一种选择是更改ORDER BY

ORDER BY solved ASC, MAX(user_tickets_replies.date) DESC, user_tickets.date DESC

这会使reply_date列保持当前状态,但仅使用最大日期进行排序。

第二种是更改SELECT

SELECT ..., MAX(user_tickets_replies.date) AS reply_date

这会更改reply_date列,使user_tickets中每行包含一个值,而不是user_tickets_replies中每行包含一个值。

答案 1 :(得分:0)

最后一个回复日期应该是Max(user_tickets_replies.date)吧?

我会加入你想要排序的数据的子选择。

inner join (SELECT user_ticket_id, max(date) as reply_date FROM user_tickets_replies group by 1 order by 2 desc limit 200) sorted_tickets

然后

 order by sorted_tickets.reply_date 

答案 2 :(得分:0)

感谢所有答案,但我最终使用的是PHP。使用此查询获取所有票证:

SELECT user_ticket_id, user_id, solved, subject, date FROM user_tickets ORDER BY solved ASC, date DESC LIMIT 200

然后将所有数据添加到数组中并使用以下内容对其进行排序:

usort($tickets, function($a, $b) {
    $solved = $a['solved'] - $b['solved'];
    if ($solved) return $solved; 
    return $a['replied'] > $b['replied'];
});