我有下面的SQL语句,它从数据库中选择公司(带有存储的lat/lng),并显示离客户位置最近的5个位置。这是非常有效的:
$query =sprintf(“选择company_name、地址、电话、传真、contact_email、网站、网址、纬度、经度、(1.609344 * 3959 * acos( cos(弧度(‘.$center_lat.“)))* cos(弧度(纬度))* cos(弧度(经度)-弧度(’.$center_lng.‘))+ sin(弧形(’.$center_lat.‘)* sin(弧度(纬度))与cmsms_module_compdir_companies的距离(状态=’发布‘和纬度!=’和‘经度!=’按距离限制5‘排序! mysql_real_escape_string($center_lat) mysql_real_escape_string($center_lng) Mysql_real_escape_string($center_lat);
但是,我只想把结果限制在离客户位置的X距离以内的那些商店,比如50公里处。我想我可以在下面加黑体字:
$query =sprintf(“选择company_name、地址、电话、传真、contact_email、网站、网址、纬度、经度、(1.609344 * 3959 * acos( cos(弧度(‘.$center_lat.“)))* cos(弧度(纬度))* cos(弧度(经度)-弧度(’.$center_lng.‘))+ sin(弧形(’.$center_lat.‘)* sin(弧度(纬度))与cmsms_module_compdir_companies的距离(状态=’发布‘和纬度!=’‘和经度!='‘和距离<’50‘顺序按距离限制5 ",mysql_real_escape_string($center_lat) mysql_real_escape_string($center_lng) Mysql_real_escape_string($center_lat);
...but --这根本不返回任何结果。
有什么想法吗?
发布于 2012-12-02 16:00:12
不能在distance条件下使用计算值where。
请使用having
where ....
having distance < 50顺便问一下:距离的单位是公里?
发布于 2012-12-02 16:00:49
不能在WHERE子句中使用列别名。
所以你应该用
WHERE (1.609344 * 3959 * acos( cos( radians('".$center_lat."') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('".$center_lng."') ) + sin( radians('".$center_lat."') ) * sin( radians( latitude ) ) ) ) < 50或添加查询选择为表(未测试,请耐心)
SELECT tmpt.distance, company_name, address, telephone, fax, contact_email, website, url, latitude, longitude,
FROM (SELECT *your expression* FROM table_name) AS tmpt,
cmsms_module_compdir_companies
WHERE status='published' AND latitude!='' AND longitude!='' AND distance<'50' ORDER BY distance limit 5发布于 2012-12-02 16:05:38
您只能在ORDER BY、GROUP BY和HAVING子句中使用别名。在查询HAVING中使用distance,使用代码如下所示:
$query = sprintf("SELECT company_name, address, telephone, fax, contact_email, website, url, latitude, longitude, (1.609344 * 3959 * acos( cos( radians('".$center_lat."') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('".$center_lng."') ) + sin( radians('".$center_lat."') ) * sin( radians( latitude ) ) ) ) AS distance FROM cmsms_module_compdir_companies WHERE status='published' AND latitude!='' AND longitude!='' HAVING distance<50 ORDER BY distance limit 5 ", mysql_real_escape_string($center_lat),
mysql_real_escape_string($center_lng),
mysql_real_escape_string($center_lat));https://stackoverflow.com/questions/13670911
复制相似问题