php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.02.2008, 14:59  
Benutzer
 
Registriert seit: 01.07.2007
Beiträge: 47
PHP-Kenntnisse:
Fortgeschritten
ecomeback
Standard COUNT in mehreren Feldern mit unterschiedlichen Bedingungen

Hallo,

sag mal, kann man innerhalb einer MySQL Abfrage mehere Werte unter verschiedenen Bedingungen zählen. Zwei Beispiele:

SELECT COUNT(id) FROM tabelle WHERE a=1
SELECT COUNT(id) FROM tabelle WHERE a=2

Es geht im Prinzip um eine etwas aufwendigere statistische Auswertung, wo ich an einer Stelle 15-20 solcher Counts habe um eben die Anzahl bestimmter Elemente unter einer bestimmten Bedingung zu ermitteln, die Spalte (hier a) muss nicht immer die gleiche sein, sondern kann auch variieren. Kann man das schneller und besser lösen? Oder habt ihr andere Lösungsvorschläge wie man das sinnvoller lösen kann. Besser in einer PHP Schleife zählen die unterschiedlichen Elemente nach Bedingung zählen?

Beste Grüße
Guido
ecomeback ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 10.02.2008, 15:28  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard

Ich hab zwar nicht so ganz verstanden was genau du willst aber ...:

COUNT(*) zählt die Anzahl an "Zeilen", COUNT(id) die Anzahl an Zeilen bei denen id nicht NULL ist.

Um das zu erreichen was du willst (oder was ich vermute was du willst ) könntest du mit SUM() und IF() arbeiten:

SELECT SUM(IF(a=1, 1, 0)) AS a_one, SUM(if(a=2, 1, 0)) as a_two, SUM(if(b=x, 1, 0)) as b_is_x FROM table


Oder auch irgendwie per GROUP BY:
SELECT count(id), a FROM table GROUP BY a
__________________
Today you...Tomorrow me.
agrajag ist offline   Mit Zitat antworten
Alt 10.02.2008, 15:33  
Erfahrener Benutzer
 
Benutzerbild von DER_Brain
 
Registriert seit: 18.04.2005
Beiträge: 1.541
PHP-Kenntnisse:
Fortgeschritten
DER_Brain ist zur Zeit noch ein unbeschriebenes Blatt
Standard

gehts ned vlt. auch so i-wie:
SELECT COUNT(id) FROM tabelle WHERE a=1 OR a=2

?


lg
Andi
DER_Brain ist offline   Mit Zitat antworten
Alt 10.02.2008, 16:39  
Benutzer
 
Registriert seit: 01.07.2007
Beiträge: 47
PHP-Kenntnisse:
Fortgeschritten
ecomeback
Standard

Den Vorschlag "Agrajag" werde ich gleich mal ausprobieren, ob das so funktioniert und wie produktiv sich das erweist. Sieht nicht schlecht aus, auch wenn das bei 20 Countern schon ganz ordentlich daherkommt. Bei der Geschichte mit dem GROUP BY habe ich noch nicht verstanden, wo du da genau den Ansatz siehst.

Zitat:
COUNT(*) zählt die Anzahl an "Zeilen", COUNT(id) die Anzahl an Zeilen bei denen id nicht NULL ist.
Und wo siehst du da nun den Unterschied, wenn id ein auto increment Feld ist. Ich behaupte COUNT(id) ist schneller als COUNT(*). Nicht?

@DER_Brain
Das geht nicht, da ich nicht Elemente unter meheren Bedingungen zählen möchte, sondern das Ergebnis des Zählers für jede Bedingung einzeln vorliegen muss.

Viele Grüße
Guido
ecomeback ist offline   Mit Zitat antworten
Alt 10.02.2008, 16:45  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard

Zitat:
Zitat von ecomeback
[...]Die Geschichte mit dem GROUP BY habe ich noch nicht verstanden, wo du da genau den Ansatz siehst.
Die GROUP-BY-Geschichte funktioniert natürlich nur dann, wenn dich nur die Anzahl der Werte in der a-Spalte intressiert.... Ich weiß/wußte ja nicht genau was du erreichen willst

Zitat:
Zitat:
COUNT(*) zählt die Anzahl an "Zeilen", COUNT(id) die Anzahl an Zeilen bei denen id nicht NULL ist.
Und wo siehst du da nun den Unterschied, wenn id ein auto increment Feld ist. Ich behaupte COUNT(id) ist schneller als COUNT(*). Nicht?
Ich wollte nur nochmal klarmachen, warum du mit COUNT() da wahrscheinlich nicht weiterkommst bzw. warum ein SELECT COUNT(a), COUNT(b) ... nicht das gewünschte Ergebnis bringen wird....
(Ob ein COUNT(id) wirklich schneller ist weiß ich nicht. Glaube ich aber nicht.)
__________________
Today you...Tomorrow me.
agrajag ist offline   Mit Zitat antworten
Alt 10.02.2008, 16:46  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Ich würde eher sagen das COUNT(*) schneller ist! Da läuft er einfach jede Zeile durch und inkrementiert den Counter. Wenn du COUNT(id) hast überprüft er bei jeder Zeile ob "id" = NULL, wenn ja dann inkrementiert er den Counter nicht!
Flor1an ist offline   Mit Zitat antworten
Alt 10.02.2008, 17:58  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.654
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

@RaZoR: COUNT(*) ist langsamer als COUNT(PrimaryKEY), da bei ersterem alle Spalten einer Tabelle einbezogen werden.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Array nach mehreren Feldern sortieren Marcel1 PHP Tipps 2008 4 04.06.2008 05:09
while schleife mit mehreren bedingungen ? cytrobic PHP Tipps 2006 8 15.06.2006 13:45
Count mit mehreren Joins cyberholic Datenbanken 4 07.06.2006 23:35
Abfrage: sortieren mit mehreren Feldern, ASC und DESC php_frage Datenbanken 3 29.04.2006 20:42
zählen in mehreren Feldern jens76 Datenbanken 4 01.11.2005 13:39
[Erledigt] Daten aus mehreren Tabellen holen Datenbanken 0 19.09.2005 17:14
Probleme mit 'count' von mehreren Spalten Datenbanken 1 26.08.2005 12:09
COUNT mit Bedingungen Heart Datenbanken 5 19.05.2005 22:25
[Erledigt] Suche mit mehreren unterschiedlichen Tabellen Datenbanken 9 31.12.2004 17:39
Suche in mehreren Feldern PHP Tipps 2004-2 1 08.11.2004 09:31

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql count mit bedingung, mysql count bedingung, count mit bedingung, countif mehrere bedingungen, count bedingung, countif mit mehreren bedingungen, mysql count if, count mit bedingung mysql, select count mit bedingung, sumif mehrere bedingungen, sql count if, countif mit zwei bedingungen, http://www.php.de/datenbanken/45481-count-mehreren-feldern-mit-unterschiedlichen-bedingungen.html, countif mit 2 bedingungen, countif zwei bedingungen, mssql count mehrere spalten, mysql count mehrere felder, count mehrere felder, mssql count bedingung, select count mehrere felder

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:15 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.