CG: count Klausel

Hallo,

ich habe eine Tabelle mit den Spaltennamen: "ID, kategorie, artikel, view".

Jetzt sind da drin mehrere Artikel gelistet, mit mehreren gleichen Artikelnummern.
Wie kann ich nun von x-Artikeln, gehen wir mal von 2 aus, die Summe der Datensätze raubekommen?

Wahrscheinlich mit " count(irgendwas) where artikel='996' " oder so? Aber ich müsste eben von mehreren Artikeln gleichzeitig die Anzahl wissen... dann ja " count(irgendwas) where artikel='996' AND artikel='924' " usw. aber das funktioniert ja so nicht.

Hier hab ich mal ein Screenshot von einem Beispiel erstellt, allerdings hab ich da die WHERE OR Klausel genommen, aber die wäre ja im Prinzip unlogisch. http://img139.imageshack.us/img139/2922/sqlcm0.gif

Hat jemand eine Idee?

Grüße

  1. Hallo,

    Wahrscheinlich mit " count(irgendwas) where artikel='996' " oder so? Aber ich müsste eben von mehreren Artikeln gleichzeitig die Anzahl wissen... dann ja " count(irgendwas) where artikel='996' AND artikel='924' " usw. aber das funktioniert ja so nicht.

    Bei Where-Klauseln kann man auch den IN-Operator verwenden, wenn man eine liste von möglichen Werten für eine Spalte suchen will.

    Ausserdem bietet sich auch ein GROUP BY in verbiundung mit COUNT() an.

    Details dazu entnehme bitte der Dokumentation Deiner Datenbank. Dummerweise hast Du ja nicht preisgegeben, welche Du benutzt.

    Grüße
      Klaus

    1. Hi

      Ausserdem bietet sich auch ein GROUP BY in verbiundung mit COUNT() an.

      Da hab ich schon gesucht, aber nichts passendes gefunden.

      Details dazu entnehme bitte der Dokumentation Deiner Datenbank. Dummerweise hast Du ja nicht preisgegeben, welche Du benutzt.

      Ähm, soweit sind doch die groben Befehle eigentlich überall gleich. Ich benutze aber MySQL 4.01, falls das jetzt groß weiterhilft.

      Grüße

      CG

      1. Ähm, soweit sind doch die groben Befehle eigentlich überall gleich.

        Hängt von der Granularität ab.   ;)

        Ich benutze aber MySQL 4.01, falls das jetzt groß weiterhilft.

        Nehmen wir mal an Du hast eine Tabelle mit den zwei Spalten "Vorname" und "Nachname" und willst herausfinden wie oft jeder "Vorname" vorkommt, dann schreibst Du:

        SELECT
         COUNT(*),
         Vorname
        FROM
         Tabelle
        GROUP BY
         Vorname

        http://dev.mysql.com/doc/
        http://dev.mysql.com/doc/refman/5.1/de/group-by-modifiers.html
        http://dev.mysql.com/doc/refman/5.1/de/group-by-functions.html

        1. Hi

          Nehmen wir mal an Du hast eine Tabelle mit den zwei Spalten "Vorname" und "Nachname" und willst herausfinden wie oft jeder "Vorname" vorkommt, dann schreibst Du:

          SELECT
          COUNT(*),
          Vorname
          FROM
          Tabelle
          GROUP BY
          Vorname

          http://dev.mysql.com/doc/
          http://dev.mysql.com/doc/refman/5.1/de/group-by-modifiers.html
          http://dev.mysql.com/doc/refman/5.1/de/group-by-functions.html

          Danke, soweit hatte ich es auch schon gehabt, aber dann gibt er mir trotzdem 535 Datensätze aus. Er zählt ja dann alle Datensätze, ich will aber nur bestimmte haben.

          Aber das Ding ist doch, dass ich x-Artikel rausfinden muss, wie oft sie vorkommen und dann auch noch in einer Abfrage.

          Sowas in der Art:

          SELECT count( * ) , artikel
          FROM tspi_option_ver
          GROUP BY artikel

          und dann nur noch z.B. WHERE artikel='996' and Artikel='924' usw... aber eine WHERE Bedingung gibt es ja da nicht. Die HAVING Klausel nutzt mir dann irgendwie auch nichts.

          1. Unterabfragen böten sich an.

            1. Unterabfragen böten sich an.

              Du meinst, ich soll jedes Mal:
              SELECT count( * )
              FROM tspi_option_ver
              WHERE artikel = '996'
              AND view = '0'

              schreiben und dann addieren?

              1. Wenn Dir die HAVING-Klausel nicht reicht, dann freunde Dich bitte mit Unterabfragen und der - wie ich finde - schönen Dokumentation von MySQL an:
                http://dev.mysql.com/doc/refman/5.1/de/subqueries.html

          2. echo $begrüßung;

            SELECT count( * ) , artikel
            FROM tspi_option_ver
            GROUP BY artikel

            und dann nur noch z.B. WHERE artikel='996' and Artikel='924' usw... aber eine WHERE Bedingung gibt es ja da nicht. Die HAVING Klausel nutzt mir dann irgendwie auch nichts.

            Wieso gibt es kein WHERE? SELECT ... FROM ... WHERE ... GROUP BY ...

            echo "$verabschiedung $name";

          3. Hallo,

            Danke, soweit hatte ich es auch schon gehabt, aber dann gibt er mir trotzdem 535 Datensätze aus. Er zählt ja dann alle Datensätze, ich will aber nur bestimmte haben.

            Wie ich bereits sagte, bietet sich eine WHERE-Klausel unter der Verwendung des IN-Operators in Vebindung mit GROUP BY und COUNT() an.

            SELECT count( * ) , artikel
            FROM tspi_option_ver
            GROUP BY artikel
            und dann nur noch z.B. WHERE artikel='996' and Artikel='924' usw... aber eine WHERE Bedingung gibt es ja da nicht.

            Wenn man keine WHERE-Klausel formuliert, gibt es sie auch nicht, wenn man sie doch hinzufügt, dann ist sie plötzlich da. Scheinbar hast Du auch ein Problem der richtigen Formulierung des Filters. Da in einem Datensatz in einer bestimmten Spalte immer nur genau ein Wert sein kann, ist es unmöglich, dass

            WHERE artikel='996' and Artikel='924'

            funktioniert. Wenn überhaupt dann

            WHERE artikel='996' OR artikel='924'

            aber bei mehreren Werten (so ab >2) wirds bald unübersichtlich, also verwendet man dann den Operator IN:

            SELECT wasauchimmer, count(*)
                FROM woauchuimmer
               WHERE wasauchimmer IN ('einige', 'mögliche', 'werte')
            GROUP BY wasauchimmer

            Nachzulesen ist das ganze hier:
            http://dev.mysql.com/doc/refman/4.1/en/select.html
            http://dev.mysql.com/doc/refman/4.1/en/comparison-operators.html
            oder auch hier
            http://de.wikipedia.org/wiki/SQL

            Grüße
              Klaus