Leere Felder nicht mitzählen...

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Leere Felder nicht mitzählen...

    Hallo zusammen,
    mir ist grad großer Bug in meinem Bewertungssystem aufgefallen:
    Ich habe einige Bewertungsfelder, die nicht Pflicht sind und wo wenn keine Angabe gemacht wird in die DB ein leeres Feld reingeschrieben wird.
    Leider zählt er diese aber bei meinen Schnittberechnungen dann (im Nachhinein logischerweise) mit. Wie kann ich denn die leeren Felder ausschließen? Hier mein Beispiel:

    Quellcode

    1. SELECT COUNT(b_service) as anzahl_service, (SUM(b_service)/COUNT(b_service))as schnitt_service,COUNT(b_termin) as anzahl_termin,(SUM(b_termin)/COUNT(b_termin))as schnitt_termin FROM Bewertungen WHERE Was = '$hid'


    müsste im Count die leeren Felder ausschließen, mit EXISTS komm ich irgendwie nicht weiter... jmd eine Idee?
  • exists? Wenn du in der Abfrage nicht gruppierst, wird der COUNT auf die komplette Ergebnismenge angwendet.
    Also musst du an der Ergebnismenge arbeiten.

    Relevant zur Beantwortung deiner Frage wäre noch was ein leeres Feld ist? NULL? Leerer String? Mathematisches Null?

    Quellcode

    1. SELECT COUNT(b_service) AS anzahl_service,
    2. SUM(b_service)/COUNT(b_service)AS schnitt_service,
    3. COUNT(b_termin) AS anzahl_termin,
    4. SUM(b_termin)/COUNT(b_termin)AS schnitt_termin
    5. FROM Bewertungen
    6. WHERE Was = '$hid'
    7. AND b_service IS NOT NULL
  • Hm ja das mit der kompletten Ergebnissmenge ist ein Problem, weil ich ja zwei verschiedene Sachen COUNTe. Also wenn ich 18 Bewertungen zu Service habe und 15 zu Qualität COUNTed er mir zu beiden 15. Hab die leeren Felder jetzt noch mit '0' wenn keine Bewertung abgegeben worden ist und dann mit WHERE Feld != '0' aber falls es anders besser geht kann ichs auch schnell ändern...
    Wie kann ich denn die Abfrage gruppieren, dass es mir die unterschiedliche Anzahl an Bewertungen richtig ausgibt?

    Quellcode

    1. SELECT b_hersteller,COUNT(b_service) AS anzahl_service,
    2. COUNT(b_termin) AS anzahl_termin
    3. FROM Bewertungen
    4. WHERE b_hersteller = '$hid'
    5. AND b_service != '0'
    6. AND b_termin != '0'
    7. GROUP BY b_hersteller

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von student2312 ()

  • Du speicherst zwei Arten von Bewertungen in einer Spalte? Ist das Design normalisiert?
    Ich würde dir empfehlen für jede Art von Bewertung entweder einen Eintrag zu machen (und dann über BewertungsTyp zu seperieren) oder gar für beide Arten von Ratings eine eigene Tabelle zu erstellen.

    Um dein Problem bei aktuellem Layout zu lösen machst du einfach ein UNION.

    Quellcode

    1. (SELECT ... WHERE b_hersteller = '$hid' AND b_service != '0')
    2. UNION
    3. (SELECT ... WHERE b_hersteller = '$hid' AND b_hersteller != '0'(