MySQLforum.de Foren-Übersicht
 
FAQFAQ SuchenSuchen MitgliederlisteMitgliederliste BenutzergruppenBenutzergruppen RegistrierenRegistrieren ProfilProfil Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen LoginLogin

Umkreissuche mit Krücke

 
Neues Thema eröffnen   Neue Antwort erstellen    MySQLforum.de Foren-Übersicht -> Fortgeschrittene
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Max



Anmeldedatum: 21.05.2008
Beiträge: 1

BeitragVerfasst am: 21.05.2008, 08:41    Titel: Umkreissuche mit Krücke

Hallo zusammen,
ich habe eine Umkreissuche nach meinen Bedürfnissen umgebaut und habe damit große Performanceprobleme. Leider ist SQL nicht so mein Steckenpferd, daher habe ich eine entscheidende Stelle der Abfrage in PHP mit Schleifen und Arrays erstellt und damit ein bottleneck erzeugt. Ich bitte um Hilfe bei einer Lösung in SQL. Hier mein bisheriger Quellcode, der richtige Ergebnisse liefert aber eben viel zu lange braucht:

[code]
function PLZUmkreissuche($form_plz, $umkreis)
{


$sql="SELECT * FROM signup WHERE emailverified='yes' AND UID !=".$_SESSION[UID].")";
$rs = $conn->execute($sql);
while(!$rs->EOF)
{

$db_plz=$rs->fields['zip'];

//-----------Berechnung der Distanz von DB_PLZ zu Form_PLZ mit Hilfe von Werten aus openGeoDB---------------------
$sql2 = "
SELECT
DEGREES(
ACOS(
SIN(RADIANS(c1.lat)) * SIN(RADIANS(c2.lat))
+ COS(RADIANS(c1.lat)) * COS(RADIANS(c2.lat))
* COS(RADIANS(c1.lon - c2.lon))
) * 60 * 1.85201
) AS distance
FROM
geodb_textdata t1,
geodb_textdata t2,
geodb_coordinates c1,
geodb_coordinates c2
WHERE
t1.text_type = 500300000
AND t2.text_type = 500300000
AND t1.text_val = $form_plz
AND t2.text_val = $db_plz
AND c1.loc_id = t1.loc_id
AND c2.loc_id = t2.loc_id
";

$rs2 = $conn->execute($sql2);

//---------Einfügen der Werte in ein Mehrdimensionales Array------------
if(round($rs2->fields['distance']) <= $umkreis){
$data[] = array('UID' => $rs->fields['UID'], 'email' => $rs->fields['email'], 'username' => $rs->fields['username'], 'Distance' => round($rs2->fields['distance']));
}
$rs->movenext();
}
//-------------- Anordnung im Array abändern damit nach der Distanz geordnet werden kann-----------------
if($data){
foreach ($data as $key => $row) {
$UID[$key] = $row['UID'];
$email[$key] = $row['email'];
$username[$key] = $row['username'];
$Distance[$key] = $row['distance'];
}

//------------Sortiert die Werte im Array nach der Distanz aufsteigend
array_multisort($Distance, SORT_DESC, $UID, SORT_ASC, $email, SORT_ASC, $username, SORT_ASC, $data);

return $data;
}else{
return -1;
}
}

[/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    MySQLforum.de Foren-Übersicht -> Fortgeschrittene Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de
SEO phpBB powered by SEO Wiki
Impressum


Anti Bot Question MOD - phpBB MOD gegen Spambots
Vereitelte Spamregistrierungen / Spambeiträge: 101 / 0