PHP MySQL语句 - "选择为"用"其中"

时间:2012-12-02 15:52:36

标签: php mysql select printf

我有以下SQL语句从数据库中选择公司(使用存储的lat / lng)并显示最近的5个位置到客户的位置。这非常有效:

  

$ query = sprintf(“SELECT company_name,address,telephone,fax,   contact_email,网站,网址,纬度,经度,(1.609344 * 3959 *   acos(cos(radians('“。$ center_lat。”'))* cos(弧度(纬度))*   cos(弧度(经度) - 弧度('“。$ center_lng。”'))+ sin(   弧度('“。$ center_lat。”'))* sin(弧度(纬度))))AS   距离FROM cmsms_module_compdir_companies WHERE status ='published'   AND latitude!=''和经度!=''按距离限制5“,”   mysql_real_escape_string($ center_lat),
  mysql_real_escape_string($ center_lng),
  mysql_real_escape_string($ center_lat));

但是,我想将结果限制在距客户所在地X距离内的那些商店 - 比如50公里。我想我可以在下面添加粗体字:

  

$ query = sprintf(“SELECT company_name,address,telephone,fax,   contact_email,网站,网址,纬度,经度,(1.609344 * 3959 *   acos(cos(radians('“。$ center_lat。”'))* cos(弧度(纬度))*   cos(弧度(经度) - 弧度('“。$ center_lng。”'))+ sin(   弧度('“。$ center_lat。”'))* sin(弧度(纬度))))AS   距离FROM cmsms_module_compdir_companies WHERE status ='published'   AND latitude!=''AND经度!=''和距离< '50' ORDER BY   距离限制5“,mysql_real_escape_string($ center_lat),
  mysql_real_escape_string($ center_lng),
  mysql_real_escape_string($ center_lat));

...但这根本不会返回任何结果。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您无法在distance条件中使用计算值where

使用having

where ....
having distance < 50

顺便说一句:距离的单位是公里?

答案 1 :(得分:0)

您不能在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

答案 2 :(得分:0)

您只能在ORDER BYGROUP BYHAVING子句中使用别名。 在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));