2016-07-26 7 views
0

Ich verstehe nicht, warum Sortierung nicht richtig funktioniert mit "ORDER BY Durchschnitt, Votes DESC", weil ich höchste Durchschnitt und Stimmen von oben nach unten gehen müssen, aber DESC hat nicht was gelöst. Mein Ergebnis in var_dump http://pastie.org/private/b05smuh0fvw72wwp2w1zq höchsten entrie ist in der Unterseite, aber ich muss von oben beginnen und nach unten gehen.SQL-Abfrage mit DESC funktioniert nicht richtig

SELECT c.*, r.votes, c.total_comments, 
     ROUND(sumrate/votes) AS average 
FROM catalog c LEFT JOIN 
    (SELECT r.object_id, COUNT(*) as votes, SUM(r.rate) as sumrate 
     FROM ratings r 
     GROUP BY r.object_id 
    ) r 
    ON r.object_id = c.catalog_id LEFT JOIN 
    (SELECT c.catalog_id, COUNT(*) as total_comments 
     FROM comments c 
     GROUP BY c.catalog_id 
    ) c 
    ON c.catalog_id = c.catalog_id 
GROUP BY c.catalog_id 
ORDER BY average, votes DESC; 
+1

Nur ein Hinweis, dass GROUP BY ungültig ist und in neueren MySQL-Versionen nicht erlaubt ist. (Wenn eine GROUP BY-Klausel angegeben ist, muss jede Spaltenreferenz in der SELECT-Liste entweder eine Gruppierungsspalte identifizieren oder das Argument einer set-Funktion sein.) – jarlh

+0

Was meinst du? ist diese kurze Tabelle Aliase in der Gruppierung? Kannst du ein Beispiel zeigen? – SkySonny

Antwort

5

Weil Sie die Reihenfolge für jede Spalte definieren und nicht nur die order by insgesamt. Der Standardwert ist ASC.

Ihre Bestellung

ORDER BY average, votes DESC 

wiederum automatisch in

ORDER BY average ASC, votes DESC 

Aber Sie suchen

ORDER BY average DESC, votes DESC 
3

müssen Sie DESC angeben, sowohl für die Spalten. Ansonsten ist es standardmäßig ASC

SELECT c.*, r.votes, c.total_comments, 
     ROUND(sumrate/votes) AS average 
FROM catalog c LEFT JOIN 
    (SELECT r.object_id, COUNT(*) as votes, SUM(r.rate) as sumrate 
     FROM ratings r 
     GROUP BY r.object_id 
    ) r 
    ON r.object_id = c.catalog_id LEFT JOIN 
    (SELECT c.catalog_id, COUNT(*) as total_comments 
     FROM comments c 
     GROUP BY c.catalog_id 
    ) c 
    ON c.catalog_id = c.catalog_id 
GROUP BY c.catalog_id 
ORDER BY average DESC, votes DESC;