Hallo zusammen,
ich grübel derzeit über eine Datenbankabfrage und komme zu keinem (zufriedenstellenden Ergebnis).
Ich verwende MySQL 5.
Ich habe zwei Tabellen: 'user' und 'geodata'
In 'user' sind Benutzerdaten inkl. 'plz' gespeichert, in 'geodata' finden sich Koordinaten zu bekannten PLZ und PLZ-Bereichen.
Nun wird dem Benutzer nicht verboten, eine nicht bekannte PLZ anzugeben (soll auch nicht, denn ich habe Postfächer/Großkunden/etc. nicht in der Datenbank). Bei der Abfrage muss also die nächsthöhere PLZ ausgegeben werden, wenn die angegebene nicht gefunden wird.
Die einfache Abfrage ist nicht schwer und funktioniert:
SELECT user.*, geodata.x, geodata.y, geodata.z
FROM user
LEFT JOIN geodata ON geodata.plz>=user.plz
WHERE user.id='$id'
LIMIT 0,1
Jetzt möchte ich mir aber eine Liste von mehreren Einträgen ausgeben lassen. Hier komme ich nicht weiter. Eine Anfrage habe ich probiert, diese funktioniert auch, aber sie braucht aufgrund der hohen Anzahl an Datensätzen in der 'geodata' sehr lange (>30sek für 2 User):
SELECT user.*, geodata.x, geodata.y, geodata.z
FROM user
LEFT JOIN geodata ON geodata.plz = (SELECT plz FROM geodata WHERE plz>=user.plz LIMIT 0,1)
LIMIT 0,2
Welche Möglichkeiten habe ich, diese Anfrage besser zu gestalten? Mein Lösungsansatz wäre eigentlich der, dass ich die einfache Anfrage nutze und eine Möglichkeit finde, das JOIN-Ergebnis zu begrenzen. Nur habe ich keine Hinweise finden können, wie das geht.
Viele Grüße,
Sebastian