2017-04-20 2 views
2

Ich versuche, alle Informationen, die ich will, durch die folgende Abfrage zu greifen. Das ist der Kommentarwert, bei dem status = 0 und SUM-Punkte status = 0 und status = 1 sind. Hier ist, was ich habe bis jetzt (ich kann nicht den Kommentar Wert an diesem Punkt greifen)MySQL einzelne Abfrage mehrere Ergebnisse

SELECT 
    IF(status = 0, comment, NULL) AS com, 
    SUM(IF(status = 0, points, 0)) AS points1, 
    SUM(IF(status = 1, points, 0)) AS points2 
FROM `tablename` 
    WHERE mid = $mid 
    AND stage = 0 

Tabellendaten:

+----+--------+--------+-----------+-----+------+ 
| id | mid | points | comment |stage|status| 
+----+--------+--------+-----------+-----+------+ 
| 1 | 500 | 15 | Text here | 0 | 0 | 
| 2 | 500 | 5 | Blablabla | 0 | 1 | 
| 3 | 20  | 7 |   | 1 | 0 | 
| 4 | 356 | 10 | More text | 0 | 2 | 
| 5 | 9  | 0 |   | 1 | 0 | 
| 6 | 52  | 5 | Text etc | 0 | 1 | 
| 7 | 520 | 13 | Texting | 1 | 0 | 
| 8 | 540 | 8 |   | 0 | 0 | 
+----------------------------------------+------+ 

Ergebnisse Ich suche:

  • Wo mid = 500 und stage = 0
  • IF status = 0 hol mir die Punkte (15 in diesem Fall)
  • IF status = 1 hol mir die Punkte (5 in diesem Fall)
  • IF status = 0 mir den Kommentar (Text here in diesem Fall) erhalten
+2

Bearbeiten Sie Ihre Frage und liefern Sie Beispieldaten und gewünschte Ergebnisse. –

+0

@GordonLinoff Ist das besser? – Bill

Antwort

1

Wenn Sie Aggregationsfunktionen verwenden, dann werden alle Spalten aggregiert werden sollen. Ich ziehe es CASE-IF() weil der frühere Standard-SQL ist:

SELECT GROUP_CONCAT(CASE WHEN status = 0 THEN comment END) AS com, 
     SUM(CASE WHEN status = 0 THEN points ELSE 0 END) AS points_0, 
     SUM(CASE WHEN status = 1 THEN points ELSE 0 END) AS points_1 
FROM `tablename` 
WHERE mid = $mid AND stage = 0 ; 

Kommentare:

  • Dies verwendet GROUP_CONCAT() falls mehr als eine Zeile die Bedingung erfüllt und hat status = 0.
  • Die Namen der "Punkte" -Spalten stimmen mit den Status überein, die verglichen werden.
+0

Wenn nur eine Zeile die Bedingung für den Kommentar erfüllt, was sollte ich anstelle von GROUP_CONCAT verwenden? – Bill

+0

@Bill. . . Sie können 'MAX()' oder 'MIN()' verwenden. –

Verwandte Themen