2016-07-21 4 views
0

Ich arbeite an einer Funktion, die den Interessen eines Benutzers und von Gruppen entspricht. Basierend auf den Ergebnissen meiner Abfrage kann ich die Übereinstimmungen erhalten, aber ich brauche Hilfe beim Sortieren des Ergebnisses in absteigender Reihenfolge basierend auf der group_id mit dem höchsten Ergebnis.Reihenfolge der MySQL-Abfrageergebnissätze nach der meisten Anzahl von Ergebnissen/Übereinstimmungen in absteigender Reihenfolge

Zum Beispiel basierend auf dem Ergebnis unten, möchte ich es so sortieren ... group_id 47 wird oben sein, weil es 4 Ergebnisse haben, gefolgt von group_id 44 und group_id 48 mit 2 Ergebnissen und denen mit 1 Ergebnis wie group_id 40, 42, 43 und 49 werden am unteren Rand sein.

Hier ist die Beispielabfrage.

SELECT * FROM `group_questionnaire_answers` 
WHERE (question_id = 1 AND answer =3) 
OR (question_id = 2 AND answer =1) 
OR (question_id = 3 AND answer =4) 
OR (question_id = 4 AND answer =4) 
OR (question_id = 5 AND answer =4) 
OR (question_id = 6 AND answer =3) 
OR (question_id = 7 AND answer =3) 
OR (question_id = 8 AND answer =4) 
OR (question_id = 9 AND answer =5) 
OR (question_id = 10 AND answer =2) 

Hier ist die Beispielergebnismenge.

enter image description here

Ich schätze Ihre Hilfe. Vielen Dank.

+2

Bearbeiten Sie Ihre Frage und fügen Sie die Abfrage, die Sie verwenden, um die Ergebnisse zu erhalten. –

+0

Ich habe die Frage bearbeitet, danke – aabejero

Antwort

1

Es hängt davon ab, wie Sie wollen:

SELECT group_id, count(*) AS num 
FROM group_questionnaire_answers 
WHERE ... 
GROUP BY 1 ORDER BY 2 DESC 

Wenn Sie alle Details anzeigen möchten, müssen Sie verwenden Self-Join dann:

SELECT a.* 
FROM group_questionnaire_answers AS a 
JOIN (
    SELECT group_id, count(*) AS num 
    FROM group_questionnaire_answers 
    WHERE ... 
    GROUP BY 1 
) AS b ON a.group_id = b.group_id 
WHERE ... 
ORDER BY b.num DESC 

WHERE ... === Ihre orignal SQL wo

+0

perfekt, erste Abfrage, die Sie zur Verfügung gestellt haben, ist was ich brauche. Die Abfrage mochte auch verschiedene Funktionen gleichzeitig. wunderbar. danke – aabejero

+0

Hallo SIDU, kannst du mir erklären, was "GROUP BY 1 ORDER BY 2 DESC" bedeutet? :) – aabejero

+1

GROUP BY 1 ORDER BY 2 DESC == ist eine Abkürzung für == GROUP BY group_id ORDER BY count (*) DESC – SIDU