Tom: Performanceproblem Umkreissuche

Beitrag lesen

Hello Bobby,

SELECT SQL_CALC_FOUND_ROWS users.*, dest.latitude, dest.longitude, ACOS(
             SIN(RADIANS(src.latitude)) * SIN(RADIANS(dest.latitude))
             + COS(RADIANS(src.latitude)) * COS(RADIANS(dest.latitude))
             * COS(RADIANS(src.longitude) - RADIANS(dest.longitude))
        ) * 6380 AS distance,  FROM users LEFT JOIN postalcodes_de src ON (src.postalcode='01855' AND src.placename='Sebnitz') LEFT JOIN postalcodes_de dest ON (dest.postalcode=users.zip AND dest.placename=users.city) WHERE CONCAT(users.zip,users.city) IN (
                                    SELECT CONCAT(dest.postalcode,dest.placename)  FROM postalcodes_de dest
                                    LEFT JOIN postalcodes_de src ON (src.postalcode='01855' AND src.placename='Sebnitz')
                                     WHERE (ACOS(
                                     SIN(RADIANS(src.latitude)) * SIN(RADIANS(dest.latitude))
                                     + COS(RADIANS(src.latitude)) * COS(RADIANS(dest.latitude))
                                     * COS(RADIANS(src.longitude) - RADIANS(dest.longitude))
                                     ) * 6380 ) <=20)  ORDER BY  distance  ASC LIMIT 0,4

  
  
Wenn Du unbedingt beim Kreis bleiben willst, musst du aber nicht zweimal dieselbe Berechnung durchführen innerhalb eines Statements. Dafür kannst Du bei  ersten Mal eine benutzerdefinierte Variable belegen und auf diese beim zweiten Mal zugreifen.  
  
  
  
  
  
Liebe Grüße aus dem schönen Oberharz  
  
  
Tom vom Berg  
![](http://selfhtml.bitworks.de/Virencheck.gif)  
  

-- 
 ☻\_  
/▌  
/ \ Nur selber lernen macht schlau  
<http://bikers-lodge.com>