2017-12-31 19 views
3

Bitte sehen Sie sich das Problem an. Sie werden es interessant finden. Ich habe eine Tabelle member in der ich eine Spalte haben result. In diesem Ergebnis können Spalte drei Werte möglich sein und auf einmal kann nur ein Wert verwendet werden. Die Werte, die möglich sind W, L und V. Vergessen Sie die V, wie es hier nicht erforderlich ist.Wie berechnet man den Prozentsatz in eloquent?

Sagen wir, ich habe 5 Zeilen und in 3 Zeilen habe ich W und in 1 Zeile habe ich L und letzte ist V.

Also hier 3W und 1L von 4 (W + L zusammen). Also ist der Prozentsatz von W 75%. Wie kann ich es mit mysql berechnen und wenn es möglich wäre, eloquent wäre besser.

Derzeit bin ich mit dieser Lösung 1. Erste alle Zeilen 2. Ausführen von PHP-Schleife 3. Und basierend auf dem Wert der Ergebnisspalte ich den Prozentsatz am Berechnung. funktioniert gut. Aber ich denke, wenn es bessere Lösung gibt, warum nicht zu finden :)

Ich hoffe, Sie haben etwas für dieses Problem. Vielen Dank im Voraus.

Antwort

3

Wenn Sie eine reine Eloquent Lösung wollen, dies tun:

$wl = Member::whereIn('result', ['W', 'L'])->count(); 
$total = Member::count(); 
$percent = $wl/$total * 100; 

Dies ist viel effizienter als tatsächlich alle Datensätze aus DB abrufen.

+2

Einfach mehr als perfekt. Aber ich musste ein bisschen mehr bearbeiten, um es richtig zu berechnen, aber du bist ein Boss :). Danke bearbeiten Ich tat '$ wl = Mitglied :: where ('user_id', 1) -> whereIn ('Ergebnis', ['W']) -> count(); $ total = Mitglied :: where ('user_id', 1) -> where ('Ergebnis', '! =', 'V') -> count(); $ Prozent = $ wl/$ total * 100; ' – sadek

3

Ihre Frage ist ein wenig vage, aber von dem, was ich sehe, die COUNT Funktion sollte hier ausreichend sein:

SELECT 
    100.0 * COUNT(W)/COUNT(*) AS w_pct, 
    100.0 * COUNT(L)/COUNT(*) AS l_pct 
FROM yourTable; 

Natürlich, wenn Sie bereits tun eine Aggregation dann können wir die obige Abfrage ändern einschließen GROUP BY.

Verwandte Themen