devilzride
Grünschnabel
Hallöchen alle miteinander.
Hab ein kleines Problem. Und zwar geht es um eine größere MySQL-Abfrage in der diverse Sachen wie eine Umkreissuche, Alter von/bis, Geschlecht, etc abgefragt werden. Funktioniert auch alles wunderbar, das Problem ist, das bei 150 angemeldeten Usern die Abfrage schon recht lang braucht (3-4 Sekunden) und ich wollte mich um eine effizientere Lösung umhören.
Hier der Ausschnitt des Codes:
Die erste Abfrage ist für die Gesamtzahl der Treffer (damit das ganze in einzelne Seiten unterteilt werden kann).
Ich hoffe ihr habt ein paar Tips für mich
Gruß,
Frank
Hab ein kleines Problem. Und zwar geht es um eine größere MySQL-Abfrage in der diverse Sachen wie eine Umkreissuche, Alter von/bis, Geschlecht, etc abgefragt werden. Funktioniert auch alles wunderbar, das Problem ist, das bei 150 angemeldeten Usern die Abfrage schon recht lang braucht (3-4 Sekunden) und ich wollte mich um eine effizientere Lösung umhören.
Hier der Ausschnitt des Codes:
PHP:
$cnt = qry("SELECT * FROM `geodb_locations` AS s1,`user` AS s2
WHERE ".$radius."*SQRT(2*(1-cos(RADIANS(s1.breite))*cos(".$breite.")*(sin(RADIANS(s1.laenge))*sin(".$laenge.")+cos(RADIANS(s1.laenge))*cos(".$laenge."))-sin(RADIANS(s1.breite))*
sin(".$breite."))) <= ".$umkreis."
AND (TO_DAYS(NOW())-TO_DAYS(s2.bday))/365 >= '".$age_von."'
AND (TO_DAYS(NOW())-TO_DAYS(s2.bday))/365 <= '".$age_bis."'
AND s2.id != '".$_SESSION['uid']."'
AND INSTR(s1.plz, s2.plz)
".$tsex."
".$isreal."
".$single."
".$tfor."
AND s2.aktiv = 1");
$qry = qry("SELECT s2.id,s2.user,s1.ort, s2.plz, ".$radius."*SQRT(2*(1-cos(RADIANS(s1.breite))*cos(".$breite.")*(sin(RADIANS(s1.laenge))*sin(".$laenge.")+cos(RADIANS(s1.laenge))*cos(".$laenge."))- sin(RADIANS(s1.breite))*sin(".$breite."))) AS Distance FROM `geodb_locations` AS s1,`user` AS s2
WHERE ".$radius."*SQRT(2*(1-cos(RADIANS(s1.breite))*cos(".$breite.")*(sin(RADIANS(s1.laenge))*sin(".$laenge.")+cos(RADIANS(s1.laenge))*cos(".$laenge."))-sin(RADIANS(s1.breite))*
sin(".$breite."))) <= ".$umkreis."
AND (TO_DAYS(NOW())-TO_DAYS(s2.bday))/365 >= '".$age_von."'
AND (TO_DAYS(NOW())-TO_DAYS(s2.bday))/365 <= '".$age_bis."'
AND s2.id != '".$_SESSION['uid']."'
AND INSTR(s1.plz, s2.plz)
".$tsex."
".$isreal."
".$single."
".$tfor."
AND s2.aktiv = 1
ORDER BY ".$order."
LIMIT ".($page - 1)*$sites.",".$sites."");
}
$res = mysql_num_rows($cnt);
Ich hoffe ihr habt ein paar Tips für mich
Gruß,
Frank