MySQL - Größe der Ergebnismenge ermitteln
Markus
- datenbank
Hallo Forum!
Ich versuche grade die Ergebnismenge eines SQL-Querys zu ermittel und irgendwie hat mich das Archiv hier auch nicht weitergebracht.
Ich setze folgendes Query ab
SELECT user.id, user.name
FROM user
JOIN buddies ON user.id = buddies.buddie
JOIN sessions ON buddies.buddie = sessions.id
WHERE sessions.expires > NOW()
GROUP BY user.id
und erhalte die Ergebnismenge:
id name
10005 Karl
10007 Ernst
10008 Kurt
nun möchte ich aber wissen wieviele Ergebnisse zutreffen, ein COUNT(user.id) im SELECT bringt mich allerding hier nicht weiter - wie kann ich das lösen?
Ich könnte im Script mein Array durchzählen, darauf möchte ich allerdings eigentlich aus Performance-Gründen verzichten.
Gruß, Markus
yo,
nun möchte ich aber wissen wieviele Ergebnisse zutreffen, ein COUNT(user.id) im SELECT bringt mich allerding hier nicht weiter - wie kann ich das lösen?
ich nehme mal an, weil du nicht den count der jeweiligen gruppierungen haben willst, sondern wissen willst, wieviele gruppierung es gibt ? mach eine zweite abfrage draus, die das zählt.
SELECT COUNT(DISTINCT user.id)
FROM user
JOIN buddies ON user.id = buddies.buddie
JOIN sessions ON buddies.buddie = sessions.id
WHERE sessions.expires > NOW()
;
Ich könnte im Script mein Array durchzählen, darauf möchte ich allerdings eigentlich aus Performance-Gründen verzichten.
bestimmte sprachen stellen dir die gewünschte information zur verfügung, so wie php mit mysql_num_rows.
kleiner hinweis, mysql hat die dumme angewohntheit, bei deiner abfrage keine fehler anzuzeigen. ich rate dir aber an, über alle spalten zu gruppieren, also auch über den namen.
Ilja
.
.
.
SELECT COUNT(DISTINCT user.id)
FROM user
JOIN buddies ON user.id = buddies.buddie
JOIN sessions ON buddies.buddie = sessions.id
WHERE sessions.expires > NOW()
;
.
.
.
Okay! Vielen Dank für den Tip. Also kann ich das schlicht nicht mit einer einzigen Abfrage erreichen.
Dann kann ich auch die Größe meines Arrays im Perl Script ermitteln, ist wesentlich weniger Aufwand, denke ich!
Gruß, Markus
yo,
Also kann ich das schlicht nicht mit einer einzigen Abfrage erreichen.
doch, auch das würde gehen, ist aber nicht ratsam. man sollte sich vor augen führen, dass es manchmal besser ist, zwei abfragen draus zu machen, als alles in einer unterzubringen. aber ein tipp, fallst du eine nur eine haben willst, verbinden die beiden abfragen (den count und die gruppiuerung) in einem UNION ALL miteinander. bedenke dabei, dass die spaltenanzahl gleich sein muss (dummy spalte bei dem count). dann hast du alles in einer abfrage un der erste record gibt dir den count wieder.
Dann kann ich auch die Größe meines Arrays im Perl Script ermitteln, ist wesentlich weniger Aufwand, denke ich!
wie gesagt, eventuell stellt perl dafür schon eine funktionalität zur verfügung, so dass sich das problem von alleine löst.
Ilja
yo,
Also kann ich das schlicht nicht mit einer einzigen Abfrage erreichen.
doch, auch das würde gehen, ist aber nicht ratsam. man sollte sich vor augen führen, dass es manchmal besser ist, zwei abfragen draus zu machen, als alles in einer unterzubringen. aber ein tipp, fallst du eine nur eine haben willst, verbinden die beiden abfragen (den count und die gruppiuerung) in einem UNION ALL miteinander. bedenke dabei, dass die spaltenanzahl gleich sein muss (dummy spalte bei dem count). dann hast du alles in einer abfrage un der erste record gibt dir den count wieder.
Dann kann ich auch die Größe meines Arrays im Perl Script ermitteln, ist wesentlich weniger Aufwand, denke ich!
wie gesagt, eventuell stellt perl dafür schon eine funktionalität zur verfügung, so dass sich das problem von alleine löst.
Ilja
okay, vielen Dank!
echo $begrüßung;
Ich könnte im Script mein Array durchzählen, darauf möchte ich allerdings eigentlich aus Performance-Gründen verzichten.
bestimmte sprachen stellen dir die gewünschte information zur verfügung, so wie php mit mysql_num_rows.
Diese Funktionalität kann PHP nur deshalb bieten, weil es beim Ausführen von mysql_query() gleich noch die Ergebnismenge von der Datenbank vollständig abholt und zwischenspeichert. Wenn es um das reine Zählen geht und man die Datensätze nicht braucht, sollte man auf mysql_num_rows() ...
[...] eigentlich aus Performance-Gründen verzichten.
echo "$verabschiedung $name";
Hi,
Ich setze folgendes Query ab
sieht wie der klägliche Versuch eines "User online"-Zählers aus.
nun möchte ich aber wissen wieviele Ergebnisse zutreffen, ein COUNT(user.id) im SELECT bringt mich allerding hier nicht weiter
Warum nicht?
Ich könnte im Script mein Array durchzählen,
Bist Du sicher, dass die dem Script verfügbare Schnittstelle nicht per se eine entsprechende Funktionalität mitliefert?
Cheatah
Hi,
Ich setze folgendes Query ab
sieht wie der klägliche Versuch eines "User online"-Zählers aus.
sieht eher nach einem 'kläglichen' Versuch eines "Buddie-online"-Zählers aus.
nun möchte ich aber wissen wieviele Ergebnisse zutreffen, ein COUNT(user.id) im SELECT bringt mich allerding hier nicht weiter
Warum nicht?
Weil der je 1 für jede Gruppierung zählt und im Beispielfall halt NICHT 3 ausgibt sondern je Resultat 1
Ich könnte im Script mein Array durchzählen,
Bist Du sicher, dass die dem Script verfügbare Schnittstelle nicht per se eine entsprechende Funktionalität mitliefert?
Nein, bin ich nicht!
Cheatah
Markus
Hi,
sieht wie der klägliche Versuch eines "User online"-Zählers aus.
sieht eher nach einem 'kläglichen' Versuch eines "Buddie-online"-Zählers aus.
ich vermute, ein "Buddie" ("Buddy"?) ist ebenfalls ein User. Damit versuchst Du nach wie vor, HTTP Informationen zu entlocken, die es nicht bietet.
nun möchte ich aber wissen wieviele Ergebnisse zutreffen, ein COUNT(user.id) im SELECT bringt mich allerding hier nicht weiter
Warum nicht?
Weil der je 1 für jede Gruppierung zählt und im Beispielfall halt NICHT 3 ausgibt sondern je Resultat 1
Wendest Du die Gruppenfunktion auf die Tabelle an oder auf Gruppierungen der Tabelle?
Bist Du sicher, dass die dem Script verfügbare Schnittstelle nicht per se eine entsprechende Funktionalität mitliefert?
Nein, bin ich nicht!
Was hast Du getan, um dies zu ändern?
Cheatah
ich vermute, ein "Buddie" ("Buddy"?) ist ebenfalls ein User. Damit versuchst Du nach wie vor, HTTP Informationen zu entlocken, die es nicht bietet.
Das stimmt nicht ganz. Ich nutze lediglich eine weitverbreitet Möglichkeit zu schätzen ob ein User Eingeloggt ist oder nicht. Außerdem hatte ich danach NICHT gefragt!
Ende der Diskussion!
Wenn ich eine Meinung bezüglich meines Programmierstils gewünscht hätte, hätte ich das Ganze wohl nicht unter dem Themenbereich "Datenbank" und sicher mit einem anderen Titel geposted!
Ich finde Deine Äußerung absolut fehl am Platz und des Themas entsprechend auch sehr unqualifiziert! Wenn Du meinst dass Du der Programmierer Gott bist, solltest Du Dich vielleicht drauf beschränken nur noch anspruchsvolle Postings zu beantworten!
MfG Markus.