2016-06-07 9 views
0

Ich habe speichert Datensätze in meiner Tabelle, und ich möchte sie auf der Grundlage der höchsten Bewertung des Geschäfts sortieren und die nächste Entfernung zu meinem Standort hat.Multiple Bestellung von MYSql

SELECT rating, 
    (3959 * acos(cos(radians(37)) 
        * cos(radians(lat)) 
        * cos(radians(lon) 
         - radians(-122)) 
        + sin(radians(37)) 
        * sin(radians(lat)) 
       ) 
    ) AS distance 

FROM mystores sr 



order by sr.rating desc ,distance asc 

Es ist mir nicht geben meine gewünschten Ergebnisse

Tabelle MyStores

id|rating|distance 
66 5  55 
55 4  56 
99 3  60 
+0

Fügen Sie einige Beispieldaten hinzu und zeigen Sie, wie Sie sie sortieren möchten. – dcieslak

+0

Ich möchte nur die Geschäfte abholen, die die höchste Bewertung und die geringste Entfernung haben – zkn

Antwort

0

Ich gehe davon aus, dass Sie nur die nächste Laden wollen, und Sie wollen, dass alle anderen mit dem gleichen Rang ignorieren, aber mit größere Entfernung. Die Gruppe durch Raiting ermöglicht es uns, die minimale Entfernung für jede Raiting zu erhalten.

select m1.* 
from mystores m1 
join (
     select m.raiting, 
     min(m.distance) distance 
     from mystores m 
     group by m.raiting 
    ) m2 
    on m2.raiting = m1.raiting and 
    m2.distance = m1.distance 
    order by m1.raiting desc, m1.distance asc