- Ad -
php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here!

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 22-01-2009, 11:03
Peacie
 Registrierter Benutzer
Links : Onlinestatus : Peacie ist offline
Registriert seit: Nov 2003
Beiträge: 341
Peacie ist zur Zeit noch ein unbeschriebenes Blatt
Peacie eine Nachricht über ICQ schicken Peacie eine Nachricht über AIM schicken Peacie eine Nachricht über Yahoo! schicken
Standard Umkreissuche -> join auf kundendatenbank

Hallo Comunity,

ich habe mal wieder ein kleines Denkproblem.

Ich habe 2 Tabellen in einer Datenbank.
DIe Erste beinhaltet Postleitzahlen von GeoNames, die 2. beinhaltet Kundendaten.
Diese beiden Tabllen lassen nur anhand der PLZ miteinander verknüpfen.

Nun habe ich mir eine Funktion für die Umkreissuche geschrieben, die auch recht flott alle Werte die ich brauche aus der GeoDB zurückgibt.
Die Funktion gibt mir ein Array zurück, in dem unter anderem die PLZ der Orte im Umkreis steht. Aus Performancegründen kann ich hier eine maximale Anzahl an Antworten angeben.

Problem ist allerdings, das nicht alle PLZ in der GeoDB auch in unserer Kundendatenbank sind. (GeoDB ca 300.000 Datensätze, Kundendatenbank ca 5.000)

Mit einem InnerJoin auf die Kundendatenbank bei der Umkreissuche dauert die Abfrage einfach viel zu lange.
Das Array auf die Kundendatenbank jagen um zu sehen welche PLZ davon auch in der Kundendatenbank stehen würde das Ergenbniss (z.B. max 25 Datensätze) ja fäschen.

Habt Ihr einen schlauen Denkanstoss für mich ?
__________________
Mibau Datendesign - Online Ferienwelt

Geändert von Peacie (22-01-2009 um 11:08 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 22-01-2009, 12:21
Peacie
 Registrierter Benutzer
Links : Onlinestatus : Peacie ist offline
Registriert seit: Nov 2003
Beiträge: 341
Peacie ist zur Zeit noch ein unbeschriebenes Blatt
Peacie eine Nachricht über ICQ schicken Peacie eine Nachricht über AIM schicken Peacie eine Nachricht über Yahoo! schicken
Standard

hab nun ein einigermaßen schnellen sql hinbekommen

trotzdem danke fürs lesen
__________________
Mibau Datendesign - Online Ferienwelt
Mit Zitat antworten
  #3 (permalink)  
Alt 22-01-2009, 12:25
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Und was war dein Lösungsansatz?
Für Leute mit ähnlichen Problemen.
Mit Zitat antworten
  #4 (permalink)  
Alt 22-01-2009, 12:53
Peacie
 Registrierter Benutzer
Links : Onlinestatus : Peacie ist offline
Registriert seit: Nov 2003
Beiträge: 341
Peacie ist zur Zeit noch ein unbeschriebenes Blatt
Peacie eine Nachricht über ICQ schicken Peacie eine Nachricht über AIM schicken Peacie eine Nachricht über Yahoo! schicken
Standard

arbeite das kurz auf und poste gleich meinen code.
Hab nur noch ein kleines count problem
__________________
Mibau Datendesign - Online Ferienwelt
Mit Zitat antworten
  #5 (permalink)  
Alt 22-01-2009, 14:16
Peacie
 Registrierter Benutzer
Links : Onlinestatus : Peacie ist offline
Registriert seit: Nov 2003
Beiträge: 341
Peacie ist zur Zeit noch ein unbeschriebenes Blatt
Peacie eine Nachricht über ICQ schicken Peacie eine Nachricht über AIM schicken Peacie eine Nachricht über Yahoo! schicken
Standard

tja, da hab ich den mund wohl zu voll genommen :P

bin wieder am anfang und meine datenbank zeigt mir nen vogel.

die eigentlich recht schnelle abfrage nur an die geodn sieht so aus:

http://www.urlaubsuche-deutschland.de/geo1.php

code dazu:
http://www.urlaubsuche-deutschland.de/zeige.php


wenn ich nun einen innerjoin auf unsere kundendb einfüge:

inner join (select onummer, oort, oplz from `".DBTBLPREFIX."Objektstamm` ) AS b on a.plz = b.oplz

dauert die abfrage länger als ne tasse kaffee
__________________
Mibau Datendesign - Online Ferienwelt
Mit Zitat antworten
  #6 (permalink)  
Alt 22-01-2009, 14:26
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Warum legst du nicht einfach einen Cache des Ergebnisses an?
Wenn ein neuer Kunde dazu kommt muss du natürlich den Cache entsprechend aktualisieren.


Ansonsten bietet sich noch ein ganz anderer Weg an:
Du koppelst Umkreissuche an PLZ. Das eine hat aber mit dem anderen spontan mal nix zutun. (20 Meter weiter ist bei mir ein anderer Ort, das ist zwar nah, die PLZ unterscheidet sich trotzdem schon ab der 3. Stelle).
Du kannst auch zu jedem Benutzer den Längen- und Breitengrad speichern (PLZ -> Grade) und dann mit einer tollen Formel, die du dir ergoogelst, alle Benutzer in einem Umkreis von einem bestimmten Punkt (den du dir erneut mit Längen- und Breitengrad spezifizierst) selektieren.

Du brauchst dann nur noch eine große DB, welche dir die PLZs auf die Grade mappt, und eine tolle Formel+hoffentlich mögliche Indizes auf deine sowieso vorhandene Tabelle.
Mit Zitat antworten
  #7 (permalink)  
Alt 22-01-2009, 14:41
Peacie
 Registrierter Benutzer
Links : Onlinestatus : Peacie ist offline
Registriert seit: Nov 2003
Beiträge: 341
Peacie ist zur Zeit noch ein unbeschriebenes Blatt
Peacie eine Nachricht über ICQ schicken Peacie eine Nachricht über AIM schicken Peacie eine Nachricht über Yahoo! schicken
Standard

danke für die fixe antwort.

ich versuchs mal andersrum zu erklären

ich brauche NICHT die geodaten (längen und breitengrad) von jedem kunden.
ich habe lediglich einen ort (anhand der plz) von dem ich ja mit meiner funktion get_lat_lon den längen und breitengrad bekomme.

nun brauche ich alle orte in einem bestimmten umkreis. funktioniert prima über die funktion umkreis.

das einzige was ich nun noch wissen muss ist, ob in diesen orten aus der funktion umkreis mindestens ein kunde sitzt.
EDIT:
also eine abfrage, ob die gefundene PLZ von umkreis in meiner kundendatenbank existiert

ist mit nem 2. sql kein problem.
aber:
wenn ich nun umkreis mit einer maximalen anzahl von 50 ergebnissen aufrufen will, danach den 2. sql auf meine kundendatenbank abschiesse, die wiederum aber nur 30 übereinstimmungen hat, könnte ich ja nie genau sagen, welche 50 orte denn nun in der nähe von dem ursprungsort sind in denen auch kunden sitzen.

ich hoffe ich habs möglichst schlau rüber gebracht :P
__________________
Mibau Datendesign - Online Ferienwelt

Geändert von Peacie (22-01-2009 um 14:45 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 22-01-2009, 16:13
Peacie
 Registrierter Benutzer
Links : Onlinestatus : Peacie ist offline
Registriert seit: Nov 2003
Beiträge: 341
Peacie ist zur Zeit noch ein unbeschriebenes Blatt
Peacie eine Nachricht über ICQ schicken Peacie eine Nachricht über AIM schicken Peacie eine Nachricht über Yahoo! schicken
Standard

Für alle, die es noch interessiert.

ich habe die Abfrage nun doch mit einem 2. SQL abgeschickt


code dazu:
http://www.urlaubsuche-deutschland.de/zeige.php

ergebniss ist annehmbar schnell:

http://www.urlaubsuche-deutschland.de/geo1.php

EDIT:

ich brauche die postleitzahlen bzw die später daraus resultierenden orte für eine darstellung in google maps.
wer dazu noch fragen hat, möge mich einfach anschreiben

__________________
Mibau Datendesign - Online Ferienwelt

Geändert von Peacie (22-01-2009 um 16:20 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

MariaDB 5.5 veröffentlicht
MariaDB 5.5 veröffentlichtDie freie MySQL-Alternative MariaDB wurde in der stabilen Version 5.5.23 veröffentlicht und soll einige Verbesserungen gegenüber Oracles Communityversion von MySQL mitbringen.

16.04.2012 | Berni

Deutsche Yii Framework Community
Deutsche Yii Framework CommunitySeit dem 19.03.2012 gibt es für die Yii PHP Framework Community ein deutsches Zuhause.

20.03.2012 | dhcomputer

 

Aktuelle PHP Scripte

Advanced Login ansehen Advanced Login

Login-System und Kundenverwaltung, die sich spielend leicht in bestehende Webseiten einbauen lässt und einen enormen Funktionsumfang bietet. Ihre eigene Webseite muss mit Advanced Login nicht umständlich an ein fertiges System angepasst werden.

25.05.2012 Madden | Kategorie: PHP/ Kundenverwaltung
BROM CMS/BelCal 3 ansehen BROM CMS/BelCal 3

Spezielles CMS für Betreiber von Ferienwohnungen. Komplette Seitenerstellung online, Verwaltung mehrerer Objekte, Reservierungssystem mit sofortigem Abgleich im Belegungskalender und vieles mehr bietet dieses Content Management System.

25.05.2012 belcal2 | Kategorie: PHP/ CMS
belbit LiveSupport Script ansehen belbit LiveSupport Script

Schnellen und unkomplizierten Support im LiveSupport-Chat anbieten. Ohne Datenbank und in wenigen Sekunden installiert.

24.05.2012 EichbaumMedia | Kategorie: PHP/ Chat
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:23 Uhr.