PLZ und Distanz rechnung


#1
Hallo zusammen,

kurz vorweg bin neu hier und auch neu im PHP :D.

Also, ich hätte eine kleine frage:

ich habe eine OpenGeoDB Datenbank, welche normal Ort und PLZ beinhalten. Dazu habe ich noch ein andere Datenbank, welche PLZ der Nutzer, eine Bezeichnung sowie ID und Name beinhalten.

Jetzt soll es eigentlich so laufen : Nutzer gibt eine Bezeichnung an ( wird vorgegeben ) z.B Musiker, dazu gibt er seine PLZ an..
Nun sollen die Daten angezeigt werden in einem Umkreis von ca 50 Km... Ich habe schon gesucht und google genutzt , aber finde leider keinen Ansatz...

Hoffe Ihr könnt mir helfen.
Mit freundlichen Grüßen.
 
#3
okay, dafür danke, aber nun die frage wie am besten die Daten verbinden, also z.B PLZ 475xx wird gesucht. Umkreis von 50 Km sollen alle z.B Geschäfte angezeigt werden die in einer anderen Datenbank gespeichert werden. Oder finde ich einfach gerade den Zusammenhang nicht ...
 

Yaslaw

n/a
Moderator
#4
Eine andere Datebank oder eine andere Tabelle in derselben Datenbank.
Wenn sie getrennt sind, sind sie auf demselben DB-Server?
Und ist es MySQL oder Oracle-DB oder Maria DB oder...
 
#5
Eine andere Datebank oder eine andere Tabelle in derselben Datenbank.
Wenn sie getrennt sind, sind sie auf demselben DB-Server?
Und ist es MySQL oder Oracle-DB oder Maria DB oder...
Ist alles auf einem Server, Ja. Sorry, meine also eine andere Tabelle.
ServerTyp, also vom Hoster aus : MySQL .

Habe eine Tabelle, welche wie folgt ist :
SQL:
INSERT INTO orte (staat, plz, name, lat, lon) VALUES
('AT', '1010', 'Wien', 48.209, 16.37),
('AT', '1020', 'Wien', 48.209, 16.37),
('AT', '1030', 'Wien', 48.209, 16.37),
('AT', '1040', 'Wien', 48.209, 16.37),
('AT', '1050', 'Wien', 48.209, 16.37),
('AT', '1060', 'Wien', 48.209, 16.37),
etc...
Die andere ist ist folgend:
SQL:
ID, full_name, bezeichnung, straße etc...
etc...
und soll so funktionieren, dass jemand seine PLZ eingibt und die Daten welche in der anderen Tabelle sind raus genommen werden in ca 50 km Abstand.

hoffe ich konnte es verständlich erklären.
 

Yaslaw

n/a
Moderator
#6
Vornweg Ich habe keine Ahnung von OpenGeoDB, dafür viel von SQL.

Gemäss Doku brauchst du glaub etwa diese Abfrage. Musst du halt für dich anpassen.
SQL:
SELECT 
    dest.zc_zip, 
    dest.zc_location_name,
    ACOS(
         SIN(RADIANS(src.zc_lat)) * SIN(RADIANS(dest.zc_lat)) 
         + COS(RADIANS(src.zc_lat)) * COS(RADIANS(dest.zc_lat))
         * COS(RADIANS(src.zc_lon) - RADIANS(dest.zc_lon))
    ) * 6380 AS distance
FROM zip_coordinates dest
CROSS JOIN zip_coordinates src
WHERE src.zc_id = 9024
AND dest.zc_id <> src.zc_id
HAVING distance < 10
ORDER BY distance;
Dann deine "Die Andere" Tabelle hinzufügen (Ist nur als Beispiel!)
SQL:
SELECT 
	-- Hier die Felder der "Die andere" Tabelle ausgebe
	andere.*,
    dest.zc_zip, 
    dest.zc_location_name,
    ACOS(
         SIN(RADIANS(src.zc_lat)) * SIN(RADIANS(dest.zc_lat)) 
         + COS(RADIANS(src.zc_lat)) * COS(RADIANS(dest.zc_lat))
         * COS(RADIANS(src.zc_lon) - RADIANS(dest.zc_lon))
    ) * 6380 AS distance
FROM zip_coordinates dest
	-- Hier deine "Die andere" hinzufügen
	INNER JOIN die_andere andere
	WHERE dest.zc_zip = andere.plz
CROSS JOIN zip_coordinates src
WHERE src.zc_id = 9024
AND dest.zc_id <> src.zc_id
HAVING distance < 10
ORDER BY distance;
 
#8
Habe es mit beiden Vorschlägen versucht, aber ich bekomme es einfach nicht gebacken... Dabei klingt es ja eigentlich nicht schwer Endnutzer gibt seine PLZ ein und es werden Daten aus einer Tabelle geladen in einem umkreis von 50km... bin Langsam echt an verzweifeln ...
 
#10
Was für ein problem hast Du den bei meinem verlinkten Script.
Das ist ja eigentlich gut erklärt und es funktioniert definitiv.

Grüße
Hallo, mit dem Script selbst habe ich keine Probleme diese funktioniert ohne Probleme. Kann meine PLZ eingeben und er gibt mir die gewünschte Distanz plus die Umliegenden Städte richtig an. Aber was mir fehlt, also leider nicht weiß wie ich das machen kann, oder soll... Das dazu passend die Daten aus einer anderen Tabelle passend dazu geladen werden.. Also z.B so : PLZ 45721 alle Geschäfte die in der angegebene Distanz liegen sollen angezeigt werden..


Und noch eine kleine frage, daraus werde ich auch nicht richtig schlau, kann ich das Format wie es ausgegeben wird bearbeiten irgendwie, oder muss ich diese einfach via HTML ändern?

Weil kommt ja leider so vorerst alles an ..
Code:
Array ( [0] => Array ( [zip] => 44581 [city] => Castrop-Rauxel ) [1] => Array ( [zip] => 45657 [city] => Recklinghausen )
 

Jan-Frederik Stieler

Monsterator
Moderator
#11
Hi,
Ja die Daten kommen als Array an. Aber ein Array mit PHP auseinanderzunehmen und per HTML auszugeben ist ja ne Standardaufgabe.
Also kannst ja per foreach über jede Arrayebene iterieren.
Also mit Arrays wirst Du in PHP immer wieder zu tun haben, heißt es ist Standard das Dir so Daten übergeben werden oder das Du Arrays erstellst um Daten handeln zu können.

Also ich kenn ja jetzt nicht die zweite Datenquelle. Wie stehen dort den die Daten drinnen?
 
#12
Hi,
Ja die Daten kommen als Array an. Aber ein Array mit PHP auseinanderzunehmen und per HTML auszugeben ist ja ne Standardaufgabe.
Also kannst ja per foreach über jede Arrayebene iterieren.
Also mit Arrays wirst Du in PHP immer wieder zu tun haben, heißt es ist Standard das Dir so Daten übergeben werden oder das Du Arrays erstellst um Daten handeln zu können.

Also ich kenn ja jetzt nicht die zweite Datenquelle. Wie stehen dort den die Daten drinnen?
Okay, ich danke dafür werde mich damit auseinandersetzten :) .

Also ich kenn ja jetzt nicht die zweite Datenquelle. Wie stehen dort den die Daten drinnen?
Es ist eine Normale MySQL Datenbank mit folgenden Sätzen:
ID, Avatar,full_name, ort, plz,mail,phone - und andere Datensatztypen, welche aber nicht ausgelesen werden müssen. z.B Rating System, Galerie etc.

Soll halt einfach eine PLZ eingegeben werden, also vom Kunden und alle daten mit passender PLZ und umkreis sollen ausgegeben werden. Hoffe man versteht, was ich meine....
 
Zuletzt bearbeitet: