Seite 1 von 1

mySQL: 2 Ergebnisse mit einer Abfrage?

Verfasst: 19.07.2013 12:03
von Wuppi
Hi

ich bastel mal wieder eine kleine Statistik für ein Privat-Tool.

Folgende Quell-DB:

Code: Alles auswählen

id | quelle | updateok
1  | bla.de | 1
2  | blo.de | 0
3  | bla.de | 0
...
jetzt brauch ich hier folgende Infos
Welche und wieviele Quellen hab ich?
=>

Code: Alles auswählen

SELECT DISTINCT quelle, COUNT(quelle) AS anzahl FROM ofdb GROUP BY quelle
Ergebnis:
bla.de = 2
blo.de = 1

Da es hier um eine Qualitätsverbesserungsmaßnahme gilt, muß ich aber wissen wieviele "updateok" jede Quelle hat.

Wunschergebnis:

Code: Alles auswählen

quelle | anzahl | updateoks | (nichtok)
bla.de | 2      | 1         | 1
blo.de | 1      | 0         | 1
Die NICHTOK kann ich ja anhand Anzahl und updateoks errechnen (in der Ausgabe in php)


Wie bekomm ich sowas hin? in EINER Abfrage
Mein Ansatz ist über JOIN - aber das klappt mal null wie ich es bisher versucht habe (bei join heißt es bei mir try&error)

Alternativ könnte ich das mit 2 Abfragen machen. Die 2. Abfrage würde einfach nur ein "WHERE updateok=1" eingefügt bekommen und ich hätte die OK-Daten jeder Quelle. Danach merge ich das per php passend.

Aber das geht doch bestimmt auch bequemer?

Gruß
Wuppi

Re: mySQL: 2 Ergebnisse mit einer Abfrage?

Verfasst: 20.07.2013 23:16
von cYbercOsmOnauT
Da Du nach quelle gruppierst ist ein DISTINCT unnötig. DISTINCT wirkt sich zudem auf den kompletten Respond. Also nur wenn die komplette Rückgabe gleich ist, wird das zweite ignoriert.

Für Deine SQL hätte ich eine Idee. Da ich derzeit noch im Urlaub bin, kann ich sie aber nicht testen. Die Idee besteht darin, das updateok nur 1 oder 0 sein kann und wir die Werte einfach addieren um an die Anzahl zu kommen.

Code: Alles auswählen

SELECT quelle, COUNT(quelle) AS anzahl, SUM(updateok) AS updateoks, (anzahl - updateoks) AS nichtoks
FROM ofdb
WHERE 1
GROUP BY quelle
Grüße,
Tekin

Re: mySQL: 2 Ergebnisse mit einer Abfrage?

Verfasst: 23.07.2013 10:27
von Wuppi
distinct und group ... ja macht sinn das die sich ausschließen ;)

Bekomme bei deinem Vorschlag:
"#1054 - Unknown column 'anzahl' in 'field list'"

Edit:

So klappt es:

Code: Alles auswählen

SELECT quelle, COUNT( quelle ) AS anzahl, SUM( updateok ) AS updateoks, (
COUNT( quelle ) - SUM( updateok )
) AS nichtoks
FROM ofdb
WHERE 1
GROUP BY quelle
- sieht super aus ;) DANKE

Was macht das WHERE 1 dort? Wenn ich das weg lasse, sieht das Ergebnis genauso aus.

Re: mySQL: 2 Ergebnisse mit einer Abfrage?

Verfasst: 23.07.2013 10:36
von cYbercOsmOnauT
Das WHERE 1 dient nur der Korrektheit des Syntax. Denn eigentlich sollte immer ein WHERE vorhanden sein.