2016-08-20 3 views
1

Hier ist mein Code für die Nachrichtenübermittlung zu holen und ihnen die Gruppierung für jedeGroupBy nach orderBy für komplizierte Abfrage in 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); 

Chat Wenn ich die Abfrage das Ergebnis laufen nicht wie erwartet SortiertNach von nach Gruppe kommt. Ich habe viel versucht, konnte aber keine Lösung finden. Ich habe diese Lösung auch ausprobiert, konnte aber nicht funktionieren. Order By before Group By using Eloquent (Laravel)

Bitte helfen Sie mir, ich habe eine Menge Zeit verloren, um es zu klären. Vielen Dank im Voraus für Ihre Hilfe.

Antwort

0

Eine Zeile vor dem Paginieren den folgenden Code

dd($query->toSql()); 

Dies wird die Query-String zurück, um die MySQL-Abfrage zu debuggen. Wenn Sie immer noch nicht herausfinden können, was gerade passiert, fügen Sie es hier ein, um Ihnen zu helfen.

0

Das liegt daran, dass es keine legale Syntax ist, die GROUP BY-Klausel nach einem ORDER BY zu platzieren - beachten Sie die formale Definition in den Dokumenten. http://dev.mysql.com/doc/refman/5.7/en/select.html

Es ist nicht klar, was Sie eigentlich damit erreichen wollen - SQL hat keine besonders gute Unterstützung für geordnete Daten in einem Aggregat.

+0

Danke @Sam Dufel, ich wusste nicht, dass ** Gruppe von ** ist nicht legal nach ** Bestellung von **. Aber was ich tun muss ist, um 1 letzte Nachricht von jedem Chat zu bekommen (es gibt viele Nachrichten, die sich auf einen Chat beziehen), könnten Sie irgendeine Lösung dafür vorschlagen. Danke nochmal für deine Hilfe. – Logiclicker

0

Danke, dass Sie mir geholfen haben. Endlich habe ich es gelöst, ich habe Hilfe von dieser Antwort von einem anderen Beitrag https://stackoverflow.com/a/7745635/6279602 es funktioniert mit Joins nicht mit der Gruppe von, weil die Gruppe von Bestellungen nicht unterstützt.