0

まず -- 似たようなタイトルの投稿を 7 ページほど読みましたが、自分の課題に適切な洞察を見つけることができませんでした

私のSQL:

SELECT name, address, lat, lng, city, state, phone, zip, info
    , ( 3959 * acos( cos( radians('37.4969') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('-122.2674') ) + sin( radians('37.4969') ) * sin( radians( lat ) ) ) ) AS distance 
FROM myhealthfinder_map 
HAVING distance < '50'  and location = '2'  
ORDER BY distance LIMIT 0 , 10

次のエラー メッセージが表示されます: Invalid query: Unknown column 'location' in 'having clause'

HAVING の代わりに WHERE location = '2' にすると、正常に動作します [列が見つかります] (ただし、距離セレクターが必要です)。

これを倒す方法について何か提案はありますか?

4

2 に答える 2

2

WHERE と HAVING の両方を使用します。 HAVING集計列と計算列に使用されます。そしてWHERE、昔ながらの柱で。

SELECT name, address, lat, lng, city, state, phone, zip, info
    , ( 3959 * acos( cos( radians('37.4969') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('-122.2674') ) + sin( radians('37.4969') ) * sin( radians( lat ) ) ) ) AS distance 
FROM myhealthfinder_map 
WHERE location = '2' 
HAVING distance < '50'  
ORDER BY distance LIMIT 0 , 10

ここに詳しい説明がありますWHERE vs HAVING

于 2013-02-23T02:13:31.957 に答える
0

HAVINGなしで使用しないでくださいGROUP BY。代わりにこれを試すことができます

SELECT name, address, lat, lng, city, state, phone, zip, info, ( 3959 * acos( cos( radians('37.4969') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('-122.2674') ) + sin( radians('37.4969') ) * sin( radians( lat ) ) ) ) AS distance 
  FROM myhealthfinder_map 
 WHERE location = '2' AND
( 3959 * acos( cos( radians('37.4969') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('-122.2674') ) + sin( radians('37.4969') ) * sin( radians( lat ) ) ) ) < 50
 ORDER BY distance LIMIT 0 , 10

きれいではありませんが、うまくいくはずです。

于 2013-02-23T02:20:37.473 に答える