2015-12-10 32 views
0

我有兩個表,我希望獲取表A的內容,但是從表B的值排序。我按3個值排序(解決,reply_date然後日期)。但我的問題是它沒有從表B中取出最後一行,所以結果不是我所期望的。這是我迄今爲止的查詢。MySQL按另一個表的最後一行排序

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?

+0

什麼表A,B? –

+0

這是MySQL + innoDB – Fredrik

回答

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']; 
}); 
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每行一個值,每行一個值。

+0

是的,那正是我想要做的。而第二個選擇就是這樣做的。但是,我忘記提及我也想檢查最後一張機票答覆是否來自機票創建者。我現在** ** ON **有** user_tickets.user_id = user_tickets_replies.user_id **,所以我想我必須刪除它。但是,它也會按最後一次管理員回覆進行排序。我只想按創作者 - 答覆進行排序。 – Fredrik

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 
相關問題