2012-12-02 116 views
0

我有以下SQL語句從數據庫中選擇公司(使用存儲的緯度/經度)並顯示客戶位置最近的5個位置。這是工作完美:PHP MySQL語句 - 「選擇爲」與「where」

$查詢= sprintf的(「SELECT COMPANY_NAME,地址,電話,傳真, CONTACT_EMAIL,網站,網址,緯度,經度,(1.609344 * 3959 * ACOS(COS(弧度(」 (。「。。))* cos(弧度(緯度))* cos(弧度(經度) - 弧度(''。$ center_lng。''))+ sin( 弧度('」。$ center_lat。 「'))* sin(弧度(緯度))))AS 距離cmsms_module_compdir_companies WHERE status ='published' AND latitude!=''AND longitude!=''ORDER BY distance limit 5」,
mysql_real_escape_string($ center_lat),
mysql_real_escape_string($ center_lng),
mysql_real_escape_string($ center_lat));

但是,我想將結果限制爲僅距離客戶位置X距離內的商店 - 比如50公里。我以爲我可以在下面的粗體加位:

$查詢= sprintf的(「SELECT COMPANY_NAME,地址,電話,傳真, CONTACT_EMAIL,網站,網址,緯度,經度,(1.609344 * 3959個* ACOS (弧度(經度) - 弧度(''。$ center_lng。''))+ sin( 弧度(經度)(弧度(經度))* cos(弧度(緯度))* 弧度')。* sin(radians(latitude))))AS 距離cmsms_module_compdir_companies WHERE status ='published' AND latitude!=''AND longitude!=''AND distance < '50 ' ORDER BY d mysql_real_escape_string($ center_lat),
mysql_real_escape_string($ center_lng),
mysql_real_escape_string($ center_lat));

...但是這根本沒有返回結果。

任何想法?

+1

嘗試:距離<50個 – alditis

+0

@alditis - 我想這一點,沒有什麼區別。 –

回答

2

您不能在where條件下使用計算值distance

PLZ使用having

where .... 
having distance < 50 

BTW:距離單位爲公里?

+0

+1,說得好^^ –

+0

請參考使用HAVING無GROUP BY? –

+0

謝謝,這是完美的,@chumkiu似乎沒有GROUP BY的工作。 –

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 
+0

@AndreasLinden mmh'having'只適用於'group by'我認爲 –

+0

不像@pensz那樣容易解決,但仍然有效。 –

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));