初めての投稿では、ベストプラクティスを遵守しようとします。MySQLの列データのグループ化
私は、ユーザの場所を測定するMySQLクエリを作成しようとしています(クエリでは、それぞれ緯度と経度については$Lat
と)。クエリは、ユーザーに最も近い50のステーションを返す必要があります。
問題は、私のテーブルのデータに各ステーションの位置が含まれていることです。入り口 1ステーションあたり最も近い駅入口が必要です!
これは私のクエリです:
SELECT id, lat, lng, station_name, routes,
(3959 * acos(cos(radians($Lat))
* cos(radians(lat)) * cos(radians(lng) -
radians($Lng)) + sin(radians($Lat)) * sin(radians(lat)))) AS distance
FROM subway_stations ORDER BY distance LIMIT 0 , 50;
上のMySQLのクエリは、次のことを実現:
- は
- ID、緯度、LNG、STATION_NAMEとルートからのデータを選択します各ステーションの緯度と経度をユーザーの緯度と経度で測定し、そのデータを「距離」として保存する
- は駅ごとに1つのレコードのみが返されるように、私は一緒にグループにこれらの結果を必要とする50件の最も近い結果
、ユーザーに最も近い駅の入り口である距離の列、で最も低い値を持つものを返します。 。
私はGROUP BY
を使用しようとしましたが、返された結果が目的のものではないため、正しく実装されていないようです。
'station_name、id、lat、lngのグループ'をクエリに追加すると、基本的にグループ化しないのと同じになります。 –
私は、 'station_name'が一意的に' id'、 'lat'、' lng'を一意のキーとして 'id'を定義していると仮定しました。しかし、「id」のようなオリジナルの質問を読み返すことは、おそらく個々の入り口を指しているのかもしれません。あなたはおそらく正しいでしょう。私は再検討している。 – Pursuit
@Samあなたの答えが正しいようです。元の質問に答えるために 'order by'と' limit'節を追加するだけです。 (私の評判は、それが所属するあなたの質問にこのコメントをするにはまだ十分ではありません)。 – Pursuit