Wie erreicht man einen besten Treffer auf ein Datenfeld mit Postleitzahlen, wenn nicht alle Postleitzahlen vergeben bzw.
nur mit weniger als 5 Stellen eingetragen sind bzw. der User nur die ersten X Ziffern einzugeben braucht?
Ich will das an einem Beispiel zeigen:
Eingabe User: 12345
in Datenbank: 123
Um die Zahlen vergleichbar zu machen, müssen zwei Nullen angehangen werden:
neue_plz_db = alte_plz_db * 10^(5-länge_alte_plz)
-> neue_plz_db = 12300
Entsprechendes muß aus mit der eingegebenen PLZ des Users erfolgen für den Fall, dass die Länge auch kleiner 5
ist.
Allgemein könnte eine Abfrage in MySQL so aussehen:
select id from region
where ('$uplz' like concat(plz,'%') or plz like concat($uplz,'%'))
order by
abs(plz*pow(10,(5-length(plz))) - ($uplz*pow(10,(5-length($uplz)))))
limit 1";
$uplz := Eingabewert
plz := Feld in Datenbank