2010-08-05 16 views
1

J'essaie d'obtenir tous les emplacements stockés dans la base de données avec une instruction SQL décrit hereobtenir tous les marqueurs dans un rayon donné sql

Ma déclaration sql est:

SELECT TOP(10) 
       *, 
       (
        6371 * 
        acos(
         cos(
          radians(<cfqueryparam cfsqltype="CF_SQL_Numeric" value="#FORM.latitude#">) 
         ) * 
         cos(
          radians(custLat) 
         ) * 
         cos(
          radians(custLong) - 
          radians(<cfqueryparam cfsqltype="CF_SQL_Numeric" value="#FORM.longtitude#">) 
         ) + 
         sin(
          radians(<cfqueryparam cfsqltype="CF_SQL_Numeric" value="#FORM.latitude#">) 
         ) * 
         sin(
          radians(custLat) 
         ) 
        ) 
       ) AS distance 
       FROM customers 
       HAVING distance < 25 
       ORDER BY distance; 

problème est que je reçois une erreur et ne peut pas comprendre pourquoi ... erreur: Invalid column name 'distance'.

sur cette ligne: radians(<cfqueryparam cfsqltype="CF_SQL_Numeric" value="#FORM.latitude#">) (la deuxième occurrence)

Pourquoi ai-je cette erreur et comment la réparer?

Répondre

2

Ce que vous avez mal fait. Voici la solution:

SELECT distance FROM 

(SELECT TOP(10) 

       *, 
       (
        6371 * 
        acos(
         cos(
          radians(<cfqueryparam cfsqltype="CF_SQL_Numeric" value="#FORM.latitude#">) 
         ) * 
         cos(
          radians(custLat) 
         ) * 
         cos(
          radians(custLong) - 
          radians(<cfqueryparam cfsqltype="CF_SQL_Numeric value="#FORM.longtitude#">) 
         ) + 
         sin(
          radians(<cfqueryparam cfsqltype="CF_SQL_Numeric" value="#FORM.latitude#">) 
         ) * 
         sin(
          radians(custLat) 
         ) 
        ) 
       ) AS distance 
       FROM customers 
       ) newTable 
       HAVING distance < 25 
       GROUP BY distance 
       ORDER BY distance; 
+0

Ceci donne une erreur différente: La colonne 'newTable.distance' n'est pas valide dans la clause HAVING car elle n'est contenue ni dans une fonction d'agrégat ni dans la clause GROUP BY. –

+0

Désolé. Besoin de mettre la clause GROUP BY entre HAVING et ORDER BY. – ppshein

+0

vous devriez vraiment modifier votre réponse pour contenir le code correct, alors. –

0

Vous pouvez le résoudre en créant une procédure stockée ou une vue dans un serveur sql ou un serveur mysql.