2017-12-25 3 views
0

Ich versuche, wie finde ich MAX auf Laravel Querybuilder oder Eloquent verwenden können Anweisung verbinden, zum Beispiel:Laravel MAX verwenden, um auf Join-Anweisung

$userShoppings = \DB::table('shoppings') 
    ->join('products', 'shoppings.product_id', '=', 'products.id') 
    ->select('shoppings.*', 'products.name','products.amount','max(shoppings.ordering_count)') 
    ->where('shoppings.user_ordering_ip', request()->ip()) 
    ->get(); 

in diesem Code i ordering_count von shoppings Tabelle max erhalten möchten auf select Methode, aber ich diese Fehlermeldung erhalten:

Column not found: 1054 Unknown column 'max(shoppings.ordering_count)' in 'field list' 

könnte jeder Körper mir helfen, dieses Problem zu lösen?

UPDATE für Paste falsches Ergebnis

Collection {#449 ▼ 
    #items: array:3 [▼ 
    0 => {#446 ▼ 
     +"id": 11 
     +"product_id": 25 
     +"user_ordering_ip": "127.0.0.1" 
     +"ordering_count": 3 
     +"created_at": "2017-12-25 09:41:01" 
     +"updated_at": "2017-12-25 09:41:01" 
     +"amount": "128,440" 
     +"max(shoppings.ordering_count)": 3 
    } 
    1 => {#445 ▼ 
     +"id": 10 
     +"product_id": 26 
     +"user_ordering_ip": "127.0.0.1" 
     +"ordering_count": 1 
     +"created_at": "2017-12-25 09:32:13" 
     +"updated_at": "2017-12-25 09:32:13" 
     +"amount": "137,614" 
     +"max(shoppings.ordering_count)": 1 
    } 
    2 => {#452 ▼ 
     +"id": 9 
     +"product_id": 49 
     +"user_ordering_ip": "127.0.0.1" 
     +"ordering_count": 2 
     +"created_at": "2017-12-24 17:59:29" 
     +"updated_at": "2017-12-24 18:35:25" 
     +"amount": "110,092" 
     +"max(shoppings.ordering_count)": 2 
    } 
    ] 
} 

Antwort

0

könnten Sie DB::raw() verwenden. Also:

$userShoppings = \DB::table('shoppings') 
    ->join('products', 'shoppings.product_id', '=', 'products.id') 
    ->select('shoppings.*', 'products.name','products.amount', DB::raw('max(shoppings.ordering_count)')) 
    ->where('shoppings.user_ordering_ip', request()->ip()) 

    // note: you'll need to also group by all the columns 
    // you're select in `shoppings.*` 

    ->groupBy('products.name', 'products.amount', 'shoppings.id') 
    ->get(); 

https://laravel.com/docs/5.5/queries#raw-expressions

Für die groupBy() Problem ist aufgetreten, dann ist es möglich, dass Sie strict Modus aktiviert für MySQL haben. Sie können es vollständig in Ihrer database.php Datei deaktivieren, indem Sie strict => false unter Ihrer MySQL-Verbindung einstellen. Dies wird jedoch alle strengen Kontrollen deaktivieren

Wenn Sie wollen einfach ONLY_FULL_GROUP_BY deaktivieren, können Sie einen modes Schlüssel zu Ihrem MySQL-Verbindung in database.php hinzufügen wie folgt:

modes'  => [ 
       'STRICT_TRANS_TABLES', 
       'NO_ZERO_IN_DATE', 
       'NO_ZERO_DATE', 
       'ERROR_FOR_DIVISION_BY_ZERO', 
       'NO_AUTO_CREATE_USER', 
       'NO_ENGINE_SUBSTITUTION' 
      ] 

Dies wird ausdrücklich auf die andere Kontrollen ermöglichen, aber ONLY_FULL_GROUP_BY

+0

Ich bekomme diesen Fehler: 'Syntaxfehler oder Zugriffsverletzung: 1140 Mischen von GROUP Spalten (MIN(), MAX(), COUNT(), ...) ohne GROUP Spalten ist illegal, wenn es keine gibt GROUP BY-Klausel (SQL: Wählen Sie 'shoppings'. *,' Products' .name', 'products'.' Amount', max (shoppings.ordering_ zählen) von 'shoppings' inner fuge' products' auf 'shoppings'' product_id' = 'products'' id' wo 'shoppings'' user_ordering_ip' = '127.0.0.1') ' –

+0

Wahrscheinlichkeiten sind das Standardverhalten von Ihre Datenbank hat 'ONLY_FULL_GROUP_BY' auf' ON' gesetzt. In diesem Fall müssen Sie, wenn Sie Aggregatfunktionen wie MAX verwenden, nach den anderen Spalten in Ihrer SELECT-Anweisung gruppieren. Da Sie aber 'shoppings. *' Auswählen, müssen Sie entweder nur die Spalten auswählen, die Sie benötigen, und diese zur 'group by'-Klausel hinzufügen, oder Sie müssen jede der Spalten in' shoppings' auflisten Ihre "Gruppe von" sowie – djt

+0

Problem des Codes gelöst, aber ich bekomme ein falsches Ergebnis, zum Beispiel mit 'MAX' Ich möchte Max von' shoppings.ordering_count' in allen Ergebnis nicht Spalten erhalten, können Sie meinen Beitrag überprüfen? Vielen Dank –

Verwandte Themen