fehlende datensätze beim auslesen durch 0 ersetzen
-
hallo
ich stehe grad total auf dem schlauch. entweder weiß ich das problem nicht allzugenau zu definieren oder wer weiß. ich hab auch schon dr. google versucht zu füttern aber finde nicht die richtige antwort.
ich habe 2 tabellen
tabelle 1
kategorie
id -> autowert
beschreibung -> die beschreibung also z.B. "Bücher"nun habe ich eine zweite tabelle mit inhalten
id -> autowert
hauptid -> die kategorie IDnun möchte ich alle inhalte auslesen und die anzahl darstellen
Bücher [1]
Klamotten [2]
CDs ...das klappt auch wunderbar, nur wenn ich keine inhalte in der tabelle habe steht ei der hautpkategorie nix drin. da möchte ich aber eine 0 stehen haben. ich weiß nicht wie.
bisher habe ich das so
SELECT count( a.katid ) AS anzahl, k.katid
FROM inhalt a
LEFT JOIN kategorie k ON k.katid = a.katid
GROUP BY a.katid
ORDER BY a.katidweiß jemand welche änderung ich vornhemen muss damit mein vorhaben klappt und wenn zum beispiel keine CDs in der inhalt datenbank vorhanden sind es auch als 0 dargestellt wird
CDs [0]
-
Ich vermute, daß Problem liegt hier darin, daß der left join dort, mangels Eintrag, eine NULL statt der gewünschten Zahl 0 zurückliefert. Ich weiß nicht welchen SQL-Server Du verwendest und leider auch nicht ob es Standard-SQL ist, aber bei MSSQL gibt es die Funktion isnull(count(katid),'0'), die jedes Auftreten von Spalte mit dem Wert NULL durch den in der Zeichenkette ersetzt. Sprich aus NULL würde hier 0! Nur Leider ist nicht alles in Transact-SQL unbedingt kompatibel...
have a try
Karsten
-
wegus schrieb:
Ich vermute, daß Problem liegt hier darin, daß der left join dort, mangels Eintrag, eine NULL statt der gewünschten Zahl 0 zurückliefert. Ich weiß nicht welchen SQL-Server Du verwendest und leider auch nicht ob es Standard-SQL ist, aber bei MSSQL gibt es die Funktion isnull(count(katid),'0'), die jedes Auftreten von Spalte mit dem Wert NULL durch den in der Zeichenkette ersetzt. Sprich aus NULL würde hier 0! Nur Leider ist nicht alles in Transact-SQL unbedingt kompatibel...
have a try
Karsten
isnull(count(katid),'0') das muss ich mal nachschlagen. es geht dabei um MySQL 3.28 auf dem server und lokal 4.0 (aber bei 3.28 muss es auch gehen können)
ich könnte dies auch umgehen indem ich das array, indem alle werte gespeichert werden von vornherein überall auf 0 setze.
-
Wie ich das verstanden habe ist nicht das Problem, dass du NULL als Anzahl bekommst, sondern der entsprechende Datensatz ganz fehlt, oder?! Wenn dem so ist, denke ich, dass du einfach nur die 2 Tabellen vertauschen musst:
... FROM kategorie k LEFT JOIN inhalt a ...