6

任何人都可以告诉我我在 mysql 中排序结果时遇到的问题吗

问题

不能按距离以外的任何列排序

SELECT * , (
            (
            (
            ACOS( SIN( (
            '56.3168322' * PI( ) /180 ) ) * SIN( (
            `lat` * PI( ) /180 )
            ) + COS( (
            '56.3168322' * PI( ) /180 )
            ) * COS( (
            `lat` * PI( ) /180 )
            ) * COS( (
            (
            '-5.414989099999957' -  `lng`
            ) * PI( ) /180 )
            )
            )
            ) *180 / PI( )
            ) *60 * 1.1515 * 1.609344
            ) AS  `distance` 
            FROM  `incidents` 
            HAVING  `distance` <=3
            ORDER BY  `distance` ASC 
            LIMIT 0 , 30

例如,当我尝试根据 date_incident 行中的日期对列进行排序时

 SELECT * , (
                (
                (
                ACOS( SIN( (
                '56.3168322' * PI( ) /180 ) ) * SIN( (
                `lat` * PI( ) /180 )
                ) + COS( (
                '56.3168322' * PI( ) /180 )
                ) * COS( (
                `lat` * PI( ) /180 )
                ) * COS( (
                (
                '-5.414989099999957' -  `lng`
                ) * PI( ) /180 )
                )
                )
                ) *180 / PI( )
                ) *60 * 1.1515 * 1.609344
                ) AS  `distance` 
                FROM  `incidents` 
                HAVING  `distance` <=3
                ORDER BY  `date_incidents` ASC 
                LIMIT 0 , 30

在上面它不排序但仍然返回结果。

任何帮助都会很好。

4

1 回答 1

1

标准 SQL 不允许HAVING子句命名子句中未找到的任何列,GROUP BY除非它包含在 .aggregate function但 MySQL 允许在HAVING子句中引用任何别名。前任:

SELECT name, AVG(age) AS a FROM tables
   GROUP BY name
   HAVING a > 50;
于 2012-10-11T05:24:00.243 回答