0

レストランチェーンのGPS位置を示すテーブルがあり、特定の半径内のポイント(A)に最も近いレストランのアドレスを返したいです。

SELECT *
    , MIN(distance($lat, $lon, lat, lon)) as miles 
FROM all_restaurants 
WHERE lat between $lat1 and $lat2 
    AND lon between $lon1 and $lon2 
    AND miles < $miles 
GROUP BY restaurant_id 
ORDER BY miles ASC
    , company_name ASC 
LIMIT 500

エラーを返します

骨材の誤用:MIN()

4

3 に答える 3

1

あなたの問題は、あなたがでグループ化しているだけだと思いますrestaurant_id。などとして集計関数を使用する場合は、どの集計関数にも含まれていないすべての列をステートメントMIN, MAX, SUM, AVGに含める必要があります。SELECTこの場合、2つのオプションがあります。どちらの場合も、次のようにSELECT入力するだけです。restaurant_id

SELECT restaurant_id 
        , MIN(distance($lat, $lon, lat, lon)) as miles 
    FROM all_restaurants 
    WHERE lat between $lat1 and $lat2 
        AND lon between $lon1 and $lon2 
        AND miles < $miles 
    GROUP BY restaurant_id 
    ORDER BY miles ASC
        , company_name ASC 
    LIMIT 500

または、「*」に含まれる他のすべての列をグループ化に配置します(使用できないためGROUP BY *)。

于 2010-11-30T17:55:40.950 に答える
0

Lamakはやや正しかったが、これは私が代わりにやったことである

SELECT *, distance('+lat+','+lon+', lat, lon) as minmiles
FROM all_restaurants 
WHERE restaurant_id || minmiles IN 
( 
    SELECT restaurant_id || MIN(miles) as fewmiles 
    FROM ( 
        SELECT restaurant_id, distance('+lat+','+lon+', lat, lon) as miles 
        FROM restaurant_master_combined 
        WHERE lat BETWEEN $lat AND $lat2 AND lon BETWEEN $lon1 AND $lon2 AND miles < $miles
    ) 
    GROUP BY restaurant_id 
)
ORDER BY ROUND(minmiles) ASC, company_name ASC 

これが他の誰かに役立つことを願っています

于 2010-12-02T14:41:02.210 に答える
0

きっとあなたは関数を呼んでいるのdistance($lat, $lon, lat, lon)ではないでしょうか?

$latとの間の単純な減算を使用してみてlat、関数を使用して最小値を返すようにしましたMINか?

MINの目的は、テーブルフィールド、または減算などの基本的な操作で使用することだと思います。これが、発生したエラーの原因である可能性があります。

何よりもまず、集計関数の使用中は使用を避け*、クエリで必要な列をリストしてください。

おそらく、サンプルデータを提供することで、問題を解決する方法を見つけることができるかもしれません。

于 2010-11-30T17:48:13.727 に答える