Sepp: mysql: COUNT()-Frage

moin! wie zähl ich die mails von Kunde 33 ?

  
SELECT kunden.name, count(mails.id) FROM kunden, mails WHERE kunden.id = 33  

  1. yo,

    heute ist wirlich der mysql bug tag....

    erstes fehlt die join bedingung in deiner abfrage, wie die tabellen kunden und mails miteinander verbunden sind. schließlich gehört nicht jede mail zu jemden kunden.

    zweites gibt es nur unter mysql bei dieser abfrage keine fehlermeldung, sie ist nicht nur inhaltlich, sondern auch syntaktisch falsch. eine falle, in der benutzer von mysql regelmäßig reinlaufen.

    select kunden.id, kunden.name, count(mails.id)
    FROM kunden
    INNER JOIN mails ON hier_join_bedigung_eintragen
    WHERE kunden.id = 33
    GROUP BY kunden.id, kunden.name

    Ilja

    1. Hello Ilja,

      select kunden.id, kunden.name, count(mails.id)
      FROM kunden
      INNER JOIN mails ON hier_join_bedigung_eintragen
      WHERE kunden.id = 33
      GROUP BY kunden.id, kunden.name

      Da werden dann aber nur die Kunden angezeigt, die auch Mails haben, oder?

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

      1. yo,

        Da werden dann aber nur die Kunden angezeigt, die auch Mails haben, oder?

        ja, nur die mails haben. wenn man auch kunden haben will, die keine mails haben, dann müsste man einen OUTER JOIN bilden oder einen anderen weg gehen, zum beispiel unterabfragen.

        Ilja

  2. Hi,

    moin! wie zähl ich die mails von Kunde 33 ?

    Das geht in deinem Fall wohl einfach mit
    SELECT count(*) AS Anzahl FROM mails WHERE mails.kunden_id=33;

    SELECT kunden.name, count(mails.id) FROM kunden, mails WHERE kunden.id = 33

      
    Sieht aus, als wenn du Kundenname und Anzahl seiner Mails auf einmal haben moechtest.  
    Was liefert denn dein jetziges Query? Sieht aus als wuerde dort ein Join fehlen.  
    Ergaenze es mal um sowas wie:  
    `AND kunden.id=mails.kunden_id GROUP BY kunden.id`{:.language-sql}  
    wobei du "kunden\_id" durch das entsprechende Feld aus der mails-Tabelle ersetzen musst.  
      
    Wenn das nicht hilft muesstest du mal etwas genauer beschreiben, wie deine Tabellen aufgebaut sind.  
      
    mfG,  
    steckl