[MySQL4] falls Zeile nicht gefunden wird, soll 0 zurückgegeben werden

Paula

Erfahrenes Mitglied
Hallo zusammen,

ich habe folgende SQL-Abfrage:
SQL:
SELECT SUM(count_condition_id) AS sum_cci, Year, KW, condition_id
FROM alarmrankings
WHERE dienst = 'foobar'
AND (
     condition_id = 'c706bac2-14ee-71d8-07ec-0a0104150000'
  OR condition_id = 'c7166044-14ee-71d8-07ec-0a0104150000' )
AND (
     ( KW = '39' AND Year = '2006' )
  OR ( KW = '40' AND Year = '2006' )
  OR ( KW = '41' AND Year = '2006' )
  OR ( KW = '42' AND Year = '2006' )
  OR ( KW = '43' AND Year = '2006' )
  OR ( KW = '44' AND Year = '2006' )
  OR ( KW = '45' AND Year = '2006' )
  OR ( KW = '46' AND Year = '2006' )
  OR ( KW = '47' AND Year = '2006' )
)
GROUP BY condition_id, Year, KW
ORDER BY Year ASC, KW ASC, condition_id ASC
Die Abfrage klappt soweit auch. Schlussendlich möchte ich von jeder abgefragten Kalenderwoche eine Anzahl wissen. Falls jedoch in einer Woche kein Eintrag in der Tabelle ist, dann liefert mir MySQL auch nichts. Stattdessen möchte ich jedoch gerne 0 haben. Wie kann ich das umsetzen?

Die Ausgabe bisher sieht so aus:
Code:
Array
(
    [c706bac2-14ee-71d8-07ec-0a0104150000] => Array
        (
            [39] => 1271
            [40] => 1494
            [41] => 1820
            [42] => 1634
        )

    [c7166044-14ee-71d8-07ec-0a0104150000] => Array
        (
            [39] => 1271
            [40] => 1494
            [41] => 1818
            [42] => 1641
        )

)
Die fehlenden Wochen sollen aber mit 0 gespeichert werden.
 
Hallo Paula,

eine Datenbank kann dir nur Ergebnisse zurückliefern, die auch aus den Daten der Datenbank ableitbar sind.

Wenn es , wie in deinem Fall, für bestimmt Wochen keinen Eintrag gib, kannst du mit der einer SQL Abfrage diese variablen Werte auch nicht in einem Schritt darstellen.

Wenn du den Select in einer anderen Sprache (Java, PHP) integrieren würdest, könntest du dort die fehlende Werte ergänzen.

Gruß

Harald
 
Hallo Paula,

falls ein Programm (php o. ä., wie von Harald vorgeschlagen) für Dein Problem nicht zweckmässig sein sollte, könntest Du mal folgendes versuchen. Ich habe hier kein MySQL verfügbar, aber mit einer Gupta-DB (kompatibel zu DB2) funktioniert dieses:
SQL:
SELECT IFNULL( SUM(count_condition_id), 0 ) AS ...

Gruß,
Sparks
 
Danke schonmal für eure Antworte. Sparks klappt leider nicht. Es kommt aber auch zu keiner Fehlermeldung!

Ich habe es nun mit einer PHP-Schleife realisiert, aber eine SQL-Lösung wäre mir schon lieber gewesen.
PHP:
// nicht vorkommende Kalenderwochen einer condition_id werden mit 0 hinzugefuegt
foreach( $arr as $cids => $cids_value ) {
    foreach( $getGraphWeeks['weeks'] as $i ) {
        if( empty( $arr[$cids][$i] ) ) {
            $arr[$cids][$i] = 0;
        }
    }
    ksort( $arr[$cids] );
}
ksort( $arr );
 

Neue Beiträge

Zurück