count Klausel
CG
- datenbank
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
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
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
Ä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
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
Vornamehttp://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.
Unterabfragen böten sich an.
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?
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
echo $begrüßung;
SELECT count( * ) , artikel
FROM tspi_option_ver
GROUP BY artikelund 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";
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