SQL: Umkreissuche realisieren ...
Verfasst: 02.05.2012 11:49
Hi
ich habe ein Suchform welches derzeit 10 Felder durchsucht (je nachdem - der nutzer kann auch etwas einschränken indem ihn gewisse sachen egal sind). Als nächstes muss ich eine Umkreissuche reinbasteln.
Nutze hierfür eine GeoDB-Datenbank für Deutschland, Österreich und die Schweiz. Das GeoDB-Script gibt mir Länderkürzel (DE, AT, CH raus ... in der Abgleich DB stehts je ausgeschrieben - aber das ist kein Problem), PLZ, Ort (optional - erstmal unwichtig) und natürlich die Entfernung raus. Das Script scheint soweit zu klappen.
Nur jetzt muss ich in diesem Riesen-SQL-String eben dieses noch mit einbauen. Plz und LAND ... würde ich nur Deutschland anbieten, wäre das ganze einfach: "AND PLZ in('12345', '12365', '12367')". Nur leider hat man in AT/CH 4stellige die sich auch gerne mal gleichen können - und wer Grenznah wohnt ... sagen wir mal am Bodensee und 50km Reichweite (PLZ jetzt exemplarisch):
Treffer:
DE 80000
DE 80001
AT 4000
CH 8000 (CH 4000 existiert aber vielleicht am anderen Ende der Schweiz - also weiter als die 50km)
Mit IN würde ich so also IN('80000', '80001', '4000', '8000') suchen und somit auch Fehlerhafte treffer bekommen. Ich muss also die Länderabfrage integrieren. Wie mach ich das? Das ganze soll am Ende dann nach ENTFERNUNG sortiert ausgeben werden (wobei ich das ja so machen kann das ich den ersten Suchstring welcher mit die PLZs ausgibt schon nach Entfernung sortiere - im Endergebniss-String wird NIX sortiert - Denkfehler?)
Ich habe auf die Tabelle wo die Hauptsuche ausgeführt keinen wirklichen einfluss. Ich kann die auslesen - natürlich kann ich die auch bearbeiten - allerdings wird diese Tabelle vom System genutzt und gefüllt. Ich würde sonst, wenn die User ihre persönlichen Daten eingeben, mir eine Hilfsspalte füllen: "LandPlz" ... DE-80000, CH-8000 usw. Das geht NICHT - würde die suche aber wesentlich vereinfachen. Ich könnte dieses Hilfsspalte in eine andere Tabelle auslagern .. "userID | LandPlz" ... nur die bekomm ich ebenfalls nicht Live aktuallisiert => per Cronjob 3-4x am Tag ... nicht schön ...
Gruß
PS: zum Umfang: Köln -> 75km Umkreis => 964 Plz ...
ich habe ein Suchform welches derzeit 10 Felder durchsucht (je nachdem - der nutzer kann auch etwas einschränken indem ihn gewisse sachen egal sind). Als nächstes muss ich eine Umkreissuche reinbasteln.
Nutze hierfür eine GeoDB-Datenbank für Deutschland, Österreich und die Schweiz. Das GeoDB-Script gibt mir Länderkürzel (DE, AT, CH raus ... in der Abgleich DB stehts je ausgeschrieben - aber das ist kein Problem), PLZ, Ort (optional - erstmal unwichtig) und natürlich die Entfernung raus. Das Script scheint soweit zu klappen.
Nur jetzt muss ich in diesem Riesen-SQL-String eben dieses noch mit einbauen. Plz und LAND ... würde ich nur Deutschland anbieten, wäre das ganze einfach: "AND PLZ in('12345', '12365', '12367')". Nur leider hat man in AT/CH 4stellige die sich auch gerne mal gleichen können - und wer Grenznah wohnt ... sagen wir mal am Bodensee und 50km Reichweite (PLZ jetzt exemplarisch):
Treffer:
DE 80000
DE 80001
AT 4000
CH 8000 (CH 4000 existiert aber vielleicht am anderen Ende der Schweiz - also weiter als die 50km)
Mit IN würde ich so also IN('80000', '80001', '4000', '8000') suchen und somit auch Fehlerhafte treffer bekommen. Ich muss also die Länderabfrage integrieren. Wie mach ich das? Das ganze soll am Ende dann nach ENTFERNUNG sortiert ausgeben werden (wobei ich das ja so machen kann das ich den ersten Suchstring welcher mit die PLZs ausgibt schon nach Entfernung sortiere - im Endergebniss-String wird NIX sortiert - Denkfehler?)
Ich habe auf die Tabelle wo die Hauptsuche ausgeführt keinen wirklichen einfluss. Ich kann die auslesen - natürlich kann ich die auch bearbeiten - allerdings wird diese Tabelle vom System genutzt und gefüllt. Ich würde sonst, wenn die User ihre persönlichen Daten eingeben, mir eine Hilfsspalte füllen: "LandPlz" ... DE-80000, CH-8000 usw. Das geht NICHT - würde die suche aber wesentlich vereinfachen. Ich könnte dieses Hilfsspalte in eine andere Tabelle auslagern .. "userID | LandPlz" ... nur die bekomm ich ebenfalls nicht Live aktuallisiert => per Cronjob 3-4x am Tag ... nicht schön ...
Gruß
PS: zum Umfang: Köln -> 75km Umkreis => 964 Plz ...