mySQL: 2 Ergebnisse mit einer Abfrage?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Wuppi
Mitglied
Beiträge: 734
Registriert: 14.05.2002 23:04
Wohnort: Köln
Kontaktdaten:

mySQL: 2 Ergebnisse mit einer Abfrage?

Beitrag 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
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Re: mySQL: 2 Ergebnisse mit einer Abfrage?

Beitrag 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
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
Benutzeravatar
Wuppi
Mitglied
Beiträge: 734
Registriert: 14.05.2002 23:04
Wohnort: Köln
Kontaktdaten:

Re: mySQL: 2 Ergebnisse mit einer Abfrage?

Beitrag 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.
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Re: mySQL: 2 Ergebnisse mit einer Abfrage?

Beitrag von cYbercOsmOnauT »

Das WHERE 1 dient nur der Korrektheit des Syntax. Denn eigentlich sollte immer ein WHERE vorhanden sein.
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
Antworten

Zurück zu „Coding & Technik“