Taney: Count(*) in SQL Abfrage

Hallo Forum, was mache ich hier eigentlich falsch?

Folgende Tabelle: EVENTS

Tabelle: events

id  userid  friendid  eventid  datum  uhrzeit  re
      1 859 1137 2 2007-09-11 15:23:40 0
      2 859 960 3 2007-09-10 10:23:40 0
      3 859 961 3 2007-09-10 11:23:40 0

Und meine Query dazu:
select count(*) AS Treffer, id, eventid, friendid, datum, uhrzeit from EVENTS where userid=859 group by id, eventid, friendid, datum, uhrzeit;

Beim Ergebnis sollte in der Spalte "Treffer" 3 erscheinen und nicht 1.

Grüße

  1. Hello,

    select count(*) AS Treffer, id, eventid, friendid, datum, uhrzeit from EVENTS where userid=859 group by id, eventid, friendid, datum, uhrzeit;
    Beim Ergebnis sollte in der Spalte "Treffer" 3 erscheinen und nicht 1.

    nö, sollte es nicht. Du sagst "hol dir mal alle Datensätze, dann fasse zusammen sofern id, eventid, friendid, datum und uhrzeit gleich sind und sage mir dann für jede dieser Zusammenfassungen wie viele Elemente da drin sind". Dein Ergebnis wird also 3 Zeilen haben, wobei Treffer jeweils 1 ist.

    MfG
    Rouven

    --
    -------------------
    Let Bygones Be Bygones  --  Robert Pitscottie: "Chronicles of Scotland"
    1. Danke rouven,
      wie mache ich das dann, so dass bei Treffer 3 rauskommt. Ist das überhaupt möglich, das in die Query reinzupacken?

      Grüße

      1. Hello,

        wie mache ich das dann, so dass bei Treffer 3 rauskommt. Ist das überhaupt möglich, das in die Query reinzupacken?

        tja, das kommt darauf an, was du eigentlich wissen willst. Wenn es dir nur um die Gesamttreffer der User-ID geht, dann gruppiere halt danach:
        SELECT userid, COUNT(*)
        FROM events
        WHERE userid = 859
        GROUP BY userid

        MfG
        Rouven

        --
        -------------------
        Eine Bilanz ist wie der Bikini einer Frau. Sie zeigt fast alles, aber verdeckt das Wesentliche  --  Günter Stotz, Regierungsdirektor des baden-württembergischen Wirtschaftsministeriums
        1. Hi Rouven, vielen Dank für dne Tipp.
          Wenn ich nach 'userid' gruppiere, passt zwar die Spalte Treffer (3), ich erhalte aber nur noch eine Zeile als Ergebnis, anstatt alle drei. In der Spalte count(*) sollte dann halt für jede Zeile 3 drin stehen. Ist wahrscheinlich zuviel von mir verlangt ne? :-)

          Grüße

          1. Hello,

            Ist wahrscheinlich zuviel von mir verlangt ne? :-)

            Pauschal? Ja.
            Individual? Vielleicht liesse sich, je nach DBMS, Lust, Zeit und Laune etwas basteln, was zuerst die von mir vorgeschlagene Abfrage vornimmt und anschließend einen JOIN mit der Originaltabelle vornimmt. Das setzt allerdings voraus, dass das DBMS so einfach ein GROUP BY und ein WHERE in einem Subselect durchgehen lässt, ich glaube z.B. MySQL stellt sich da auf die Hinterbeine...

            MfG
            Rouven

            --
            -------------------
            Let Bygones Be Bygones  --  Robert Pitscottie: "Chronicles of Scotland"
            1. Hi,

              wir haben MySQL 5 am Laufen, müsste eigentlich klappen. Sub-Select. Damit hatte ich mal zu tun, mal schauen, ob ich das nochmal so auf die Reihe kriege.

              Grüße

              1. Hello,

                wir haben MySQL 5 am Laufen, müsste eigentlich klappen. Sub-Select. Damit hatte ich mal zu tun, mal schauen, ob ich das nochmal so auf die Reihe kriege.

                na ja, das schema wäre
                SELECT a.spalte1, a.spalte2, ..., b.anzahl
                FROM (
                   (SELECT COUNT(*) AS anzahl, userid FROM ... GROUP BY userid) b

                INNER JOIN

                (SELECT ... FROM ...) a
                   ON a.userid = b.userid
                )

                MfG
                Rouven

                --
                -------------------
                Vegetarier essen meinem Essen das Essen weg.
      2. Hi,

        wie mache ich das dann, so dass bei Treffer 3 rauskommt. Ist das überhaupt möglich, das in die Query reinzupacken?

        Was soll denn "Treffer" allgemein beziffern? Die Anzahl gefundener Datensätze (der gesamten Abfrage)?
        Dann wärst Du mit einem simplen mysql_num_rows() besser beraten.

        LG