数据库中根据经伟度排序查询

来源:互联网 发布:phpstorm mac 激活 编辑:程序博客网 时间:2024/06/08 18:01
用户列表中,用户登陆时有传入经伟度存入数据库,而在查询所有用户列表中根据距离查询用户列表排序,这时传入自己的经伟度查询数据库中所有用户的经伟度进行排序显示,

代码:



 SELECT s.*, COALESCE(ROUND(  
         6378.138 * 2 * ASIN(  
            SQRT(  
                POW(  
                    SIN(  
                        (  
                            30.671010 * PI() / 180 - a.addressY * PI() / 180  
                        ) / 2  
                    ),  
                    2  
                ) + COS(30.671010 * PI() / 180) * COS(a.addressY * PI() / 180) * POW(  
                    SIN(  
                        (  
                            104.018484 * PI() / 180 -   a.addressX * PI() / 180  
                        ) / 2  
                    ),  
                    2  
                )  
            )  
        ) * 1000
    )  ,99999999) AS son  FROM sys_user s LEFT JOIN sys_useraddress a ON s.userAddressId = a.id  ORDER BY son ASC;

sys_user:用户表。

sys_useraddress :经伟度表,与用户有关联

用户自己经伟 度

a.addressY:30.674916

a.addressX:104.027317

连表查询排序order by 经伟度的距离 

 * 1000 算出来是米,当*1000时转换为千米单位 

COALESCE(距离 ,99999999)这是当没获取到用户位置时,获取别个用户的经伟度获取错误里默认的距离,为99999999原因是:连表中获取出来是null这样就排序会在最前面所以得加个99999999这样的话排序就在最后了。


结果出来了表字段也写上:

user表(sys_user)

id  ,userName,Password,userAddressId,

address表(sys_useraddress)

id ,addressX,addressY,userId,addressName

将这两张表关联就可以使用上面的sql查询排序了

1 0
原创粉丝点击