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! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

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

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

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