MySQL Abfrage GROUP BY und Limit
Begin-GPA
- datenbank
Hi,
ich möchte aus einer MySQL-Datenbank mit einigen tausend einträgen aus jedem 2-stelligen PLZ-Bereich 5 abfragen. Leider habe ich noch keinen guten Ansatz. Freue mich über eure Hilfe.
Zumindest bekomme ich die Anzahl der einzelnen PLZ-Bereiche bereits heraus:
SELECT DISTINCT LEFT(plz, 2) bereich, COUNT(LEFT(plz, 2)) anzahl from tabelle GROUP BY LEFT(plz, 2)
Danke
Begin
Hi!
ich möchte aus einer MySQL-Datenbank mit einigen tausend einträgen aus jedem 2-stelligen PLZ-Bereich 5 abfragen. Leider habe ich noch keinen guten Ansatz.
Das Gruppieren ist schon nicht schlecht. Aber dann gehts erstmal nicht weiter, weil es einerseits keine Limitierung auf Gruppenbasis gibt und andererseits Gruppen immer nur ein Ergebnis liefern. Ich gehe mal davon aus, dass du mehr oder weniger die gesamten Datensätzt benötigst und sie über die ID identifizierbar sind.
Du kannst mit GROUP_CONCAT() alle IDs erhalten. Das werden zu viele sein. Aber auf der verlinkten Handbuchseite steht auch eine Möglichkeit die Datenmenge zu begrenzen. (ORDER BY RAND() ergibt eine zufällige ID-Reihenfolge.) Toll ist diese Methode nicht, denn nun hast du die IDs als verketteten String. Da die IDs unterschiedlich lang sind, kannst du mit der erwähnten Begrenzung nicht genau auf 5 Stück zielen, sonst könntest du Statements als String erstellen, die du mit PREPARE/EXECUTE abfeuerst. Aber vielleicht lassen sich auch noch einige Stringfunktionen verwenden. Das Ganze sollte jedenfalls in einer Stored Procedure stattfinden, die die einzelnen gruppenweisen Ergebnisse in einer temporären Tabelle zwischenspeichert und gesammelt zurückgibt.
Alternativ lassen sich die GROUP_CONCAT()-Ergebnisse auch mit PHP auseinandernehmen und über eine große WHERE id IN (...) sollten sich die Datensätze holen lassen.
Lo!
Hi,
danke für die ausführliche Antwort. Da ich diese Abfrage eigentlich nur einmal brauche werde ich es versuchen über ein Array und forech zu realisieren.
Vielen Dank
Begin