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 ID

    nun 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.katid

    weiß 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 ...
    

Anmelden zum Antworten