2012-03-28 8 views
1

Ich habe eine Tabelle mit Schülerpartituren. Die Schüler können den Test mehrere Male machen, wir kümmern uns nur um die höchste Punktzahl.PHP MySQL: Nimm die höchsten Werte aus mehreren Kategorien und schreibe ein Array?

So sieht die Tabelle so etwas wie dieses:

UserID  CatID  Score 
20   5   60 
20   5   85 
20   5   80 
20   6   90 
20   7   80 
20   7   75 
20   7   90 
22   5   75 
22   5   85 

Wollen Sie eine Zeile zurück zu erhalten, basierend auf einer Benutzer-ID-Variable, die wie folgt aussieht:

UserID  Cat5  Cat6  Cat7 
20    85   90   90 

Hier ist, was ich bisher mit als Abfrage:

SELECT score AS Score 
, catid 
FROM `quiz_result` 
WHERE userid=65 and catid=5 
ORDER BY score DESC 
LIMIT 0, 1 

Nicht sicher, wie man die anderen Kategorien in einer Reihe bekommt ... Gedanken?

Dank!

Antwort

0

dieses Stück Versuchen:

SELECT catID, MAX(score) FROM `quiz_result` 
GROUP BY catID; 

Der Ausgang wie in Ihrer Probe nicht genau gleich ist, aber es gibt ziemlich viel, was Sie brauchen.

EDIT

Ausgang wird wie:

catID  MAX(score) 
Cat5  85 
Cat6  90 
Cat7  90 

Um weitere Spalten zu erhalten, sind nur ihre Namen in der SELECT-Abfrage.

+0

Dank! Das gibt mir eine Kategorie (die meine Abfrage auch tut) - Ich muss alle Kategorien erhalten:/ – Gisto

+0

@Gisto, seine Ausgabe wird wie in der 'edited' Post gezeigt werden. – hjpotter92

+0

So ist es! Ich hatte ein Limit drin, also habe ich die anderen nicht gesehen - danke !! – Gisto

0

Versuchen Sie folgendes:

SELECT CONCAT_WS(',', catID) AS catID, CONCAT_WS(',', MAX(score)) FROM `quiz_result` GROUP BY catID; 
+1

Ahh, das hat auch funktioniert! Sorry, sah @ Hjpotter92 zuerst. Ich habe auch einen Fehler beim ersten Mal, ich denke, es sollte CONCAT_WS anstelle von WS_CONCAT sein, wenn jemand anderes sucht. – Gisto