2016-08-20 110 views
1

複雜的查詢這裏是我獲取信息和將它們分組爲每個聊天的GroupBy排序依據後在Laravel

$query = DB::table('chats'); 

    $otherUserId= $request->input('loadId'); 
    if($otherUserId==0){ 
     $query->join('users as u1', 'u1.id', '=', 'chats.user1_id'); 
     $query->join('users as u2', 'u2.id', '=', 'chats.user2_id'); 
     $query->join('messages', 'messages.chat_id', '=', 'chats.id'); 
     $query->where('chats.user1_id', '=', '{$userId}'); 
     $query->orWhere('chats.user2_id', '=', '{$userId}'); 
     $query->select('messages.chat_id', 'messages.from_id', 'u1.id as user1_id', 'u2.id as user2_id', 'messages.created_at', 'messages.body', 'messages.read', 'u1.name as user1_name', 'u2.name as user2_name', 'u1.picture_url as user1_pic', 'u2.picture_url as user2_pic'); 

     $query->orderBy('messages.created_at ', 'DESC'); 
     $query->groupBy('chat_id'); 
     $messages = $query->paginate(4); 

當我運行的結果並不如預期排序依據來自group by後的查詢代碼。我嘗試了很多,但無法找到解決方案。我也嘗試過這種解決方案,但無法使其工作。 Order By before Group By using Eloquent (Laravel)

請幫助我我已經失去了很多時間試圖整理它。預先感謝幫助我。在PAGINATE前

回答

0

一行添加以下代碼

dd($query->toSql()); 

這將返回的查詢字符串,以調試MySQL查詢。 如果您仍然無法找到所發生的事情,請將其粘貼到此處以幫助您。

0

這是因爲將GROUP BY子句放在ORDER BY之後不是合法語法 - 請注意文檔中的正式定義。 http://dev.mysql.com/doc/refman/5.7/en/select.html

目前還不清楚你實際上試圖完成什麼--SQL對聚合內的有序數據沒有特別好的支持。

+0

謝謝@薩姆杜菲爾,我不知道那**集團通過**是不合法的**之後通過**。但我需要做的是獲得每個聊天的最新消息(有許多消息與一個聊天相關),你能否提出任何解決方案。再次感謝您的幫助。 – Logiclicker