Hallo alle zusammen,
das ist mein erster Beitrag hier und ich hoffe dass ich hier einige Tipps bekomme.
Zu meinem Problem. Ich habe eine Tabelle mit allen Postleitzahlen aus Deutschland.
Bei meinem Projekt meldet der Benutzer sich an und gibt dazu seine PLZ an und einen Radius in km aus dem er Anfragen möchte.
Aus diesen Daten lade ich mir mit:
PHP-Code:
$plz = 01069;
// der Umkreis in Km
$umkreis = 10;
// Erdradius (geozentrischer Mittelwert) in Km
$radius = 6368;
// Geodaten zu meiner PLZ laden
$radiusPLZ = $db->select("SELECT geo_l, geo_b FROM plz WHERE plz = '$plz'");
// Umrechnung von GRAD IN RAD
$rad_l = $radiusPLZ[0]["geo_l"] / 180 * M_PI;
$rad_b = $radiusPLZ[0]["geo_b"] / 180 * M_PI;
// jetzt erfolgt die eigentliche Abfrage
// Alle PLZ laden die für meinen Umkreis relevant sind
$query = "SELECT plz.plz FROM plz WHERE
".$radius." * SQRT(2*(1-cos(RADIANS(geo_b)) *
cos(".$rad_b.") * (sin(RADIANS(geo_l)) *
sin(".$rad_l.") + cos(RADIANS(geo_l)) *
cos(".$rad_l.")) - sin(RADIANS(geo_b)) * sin(".$rad_b."))) <= ".$umkreis;
$daten = $db->select($query);
Dies funktioniert auch und ich bekomme die PLZ alle ins Array geschrieben.
NUn der nächste Schritt. Der Benutzer kann mehere Dienstleistungen auswählen z.B. D1, D2, D3 usw. Jede Dienstleistung wird mit einen Preis belegt.
Nun können Anfragen erstellt werden, welche wie folgt aufgebaut sind:
$dienstleistung = 1; (Steht für D1 - die 1 ist die id aus der tabelle)
$preis = 100;
$plz = 01309;
NUn möchte ich den Benutzer alle Anfragen anzeigen, welche von seiner PLZ und seinen Radius zutreffen.
Bei einem Umkreis von 10 km mag das noch gehen, da sind es wie in diesem Beispiel 26 (PLZ) x 3 (Dienstleistungen)
Diese lasse ich in einer Schliefe nun durchlaufen und den Query erstellen.
PHP-Code:
$Query.= "(d.dienst = $dienstleistung AND d.preis >= $preis AND d.plz = $plz)";
In dem Beispiel würde ich nun 78 mal OR in dem Query stehen haben. Das geht noch. Wenn ich nun den Umkreis auf 500 km setze, dann habe ich ca. 5000 PLZ x 3 Dienstleistungen = 15.000 mal OR in einer Abfrage. Die Dienstleistungen sind auch variabel, es können 3 sein, 2 oder auch 20. Entsprechend verändert sich der Wert.
Hat dazu jemand eine Idee, wie man das am optimalsten umsetzen könnte? Weil mit 15.000 OR in einer Abfrage bekomme ich nur Fehlermeldungen.
Gruß Klaus