Zufälligen Eintrag anzeigen - MySQL 5.0.27
Stefan Einspender
- datenbank
Hallo ForumsleserInnen,
mittels folgender Abfrage ermittle ich die Anzahl der Einträge pro Jahr:
SELECT YEAR(date), COUNT(*) FROM table GROUP BY 1 ORDER BY 1;
Wie kann ich nun noch einen zufälligen Dateinamen mit ausgeben?
SELECT YEAR(date), COUNT(*), RAND(datei) FROM table GROUP BY 1 ORDER BY 1;
Funktioniert natürlich nicht, hat da jemand eine Idee?
Mit freundlichen Grüßen,
Stefan Einspender
Hallo Stefan!
Stefan Einspender
Du lebst ja noch! Oder bist Du ein Geist?
;)
Viele Grüße aus Frankfurt/Main,
Patrick
Hallo Patrick,
»» Stefan Einspender
Du lebst ja noch! Oder bist Du ein Geist?
;)
nönö, mich gibt's im RL schon noch, nur im Internet habe ich mich vor paar
Jahren größtenteils ausgeklinkt.
Viele Grüße,
Stefan
Hallo Stefan!
»» Du lebst ja noch! Oder bist Du ein Geist?
nönö, mich gibt's im RL schon noch,
Freut mich!
nur im Internet habe ich mich vor paar
Jahren größtenteils ausgeklinkt.
Und das ist schade. Klinkst Du Dich jetzt wieder ein? ;)
Sorry für Dein Anliegen, aber ich habe von Datenbanken keine Ahnung (kann ja noch werden, aber solange willst Du sicher nicht warten *g*).
Viele Grüße aus Frankfurt/Main,
Patrick
echo $begrüßung;
mittels folgender Abfrage ermittle ich die Anzahl der Einträge pro Jahr:
SELECT YEAR(date), COUNT(*) FROM table GROUP BY 1 ORDER BY 1;
Willst du da nicht lieber über das Jahr gruppieren?
Wie kann ich nun noch einen zufälligen Dateinamen mit ausgeben?
SELECT YEAR(date), COUNT(*), RAND(datei) FROM table GROUP BY 1 ORDER BY 1;
Das geht nur bei MySQL, aber das ist kein echter Zufall sondern nur irgendein Wert, der da grad rumliegt. Nimm einfach die Dateinamensspalte in die Select-Klausel. Alle anderen Datenbanksysteme außer MySQL lassen es aber nicht zu, Spalten, nach denen nicht gruppiert (und keine Aggregatfunktion angewendet) wurde, in das Abfrageergebnis zu nehmen, eben aus dem Grund, weil dabei nicht ermittelt werden kann, welcher denn nun aus der Gruppe genommen werden soll. MySQL nimmt dann einen nach Belieben. Das kann am Ende immer der gleiche sein, was dir wahrscheinlich für deinen Zufall nicht viel nützt.
Vielleicht geht es mit einer korrelierten Unterabfrage, mit der du für das (gruppierte) Jahr alle Dateinamen nimmst, diese nach Zufall sortierst (ORDER BY RAND()) und mit LIMIT 1 einen davon auswählst. Diese Subquery stellst du als weiterte Spalte in die Select-Klausel.
echo "$verabschiedung $name";
Hi,
»» SELECT YEAR(date), COUNT(*) FROM table GROUP BY 1 ORDER BY 1;
Willst du da nicht lieber über das Jahr gruppieren?
mache ich doch? Also mit GROUP BY 1 gruppiere ich noch nach YEAR(date)?
Das geht nur bei MySQL, aber das ist kein echter Zufall sondern nur irgendein Wert, der da grad rumliegt. Nimm einfach die Dateinamensspalte in die Select-Klausel.
Ja, was da rauskommt ist Unfug. Scheinbar immer der erste Datensatz, wo
das Jahr gerade passt. Nicht zu gebrauchen.
Vielleicht geht es mit einer korrelierten Unterabfrage, mit der du für das (gruppierte) Jahr alle Dateinamen nimmst, diese nach Zufall sortierst (ORDER BY RAND()) und mit LIMIT 1 einen davon auswählst. Diese Subquery stellst du als weiterte Spalte in die Select-Klausel.
OK, funktioniert. Aktuell habe ich da nur das Problem, dass die Performance
ganz böse in den Keller geht. Aus 0,0014 Sekunden werden dann plötzlich mehr
als 0,2 Sekunden Laufzeit, geht natürlich nicht. Aber mit der Datenbank-
Optimierung beschäftige ich mich andermal, aktuell geht es erstmal um die
rein programmiertechnische Umsetzung. Und wenn, was nicht ausgeschlossen
ist, die ganze Sache eh noch auf PostgreSQL umgestellt wird, dann brauche
ich ja jetzt nicht die Datenbank-Performance optimieren.
Viele Grüße,
Stefan
echo $begrüßung;
» » SELECT YEAR(date), COUNT(*) FROM table GROUP BY 1 ORDER BY 1;
» Willst du da nicht lieber über das Jahr gruppieren?
mache ich doch? Also mit GROUP BY 1 gruppiere ich noch nach YEAR(date)?
Ach, sieh an, nicht nur beim ORDER BY kann man die Spaltenposition angeben, auch beim GROUP BY.
echo "$verabschiedung $name";
Hallo,
» mache ich doch? Also mit GROUP BY 1 gruppiere ich noch nach YEAR(date)?
Ach, sieh an, nicht nur beim ORDER BY kann man die Spaltenposition angeben, auch beim GROUP BY.
und das Handbuch meint dazu:
<zitat>
Use of column positions is deprecated because the
syntax has been removed from the SQL standard.
</zitat>
Freundliche Grüße
Vinzenz