近くのディーラーを検索するディーラーロケーターを作成する。ディーラーがその人の近くに複数の支店を持っていれば、最も近い支店だけが表示されるような仕組みで作業したいと思っています。そのため、「名前」フィールドは結果内で一意でなければならず、同じ「名前」フィールドを持つ他の行と比較して、検索する人との距離が最も短い結果が示されます。私はまた、ディーラーレベル、すなわちメダルで注文された最も近い5つのディーラーだけを望んでいます。今、私は以下の持っている:私は何を読んでから、SQL - 基準に基づくUnqiueの結果
$query = sprintf("SELECT
name, address, contact, image, medal, phone, email, website, lat, lng,
(3959 * acos(cos(radians('%s')) * cos(radians(lat)) * cos(radians(lng) - radians('%s')) + sin(radians('%s')) * sin(radians(lat)))) AS distance
FROM dealers
HAVING distance < 60
ORDER BY medal, distance
LIMIT 0 , 5",
mysql_real_escape_string($center_lat),
mysql_real_escape_string($center_lng),
mysql_real_escape_string($center_lat),
mysql_real_escape_string($radius));
$result = mysql_query($query);
、私のような何かをする必要があるように聞こえる:そのような
SELECT * FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY name ORDER BY distance) AS num
FROM dealers)a
WHERE a.num = 1
か何かを、私はそれを得ることができません右に働く。どのように私がこれを機能させることができるかについての洞察は非常に高く評価されるだろう。
MySQLは、row_numberなどのウィンドウ関数をサポートしていません。 –
パラメータ化されたクエリに 'sprintf'を使用しないでください。[PDO](http://php.net/manual/en/pdo.prepare.php)を使用してください。より安全で、コードをよりメンテナンス可能にします。 –
[dba.stackexchange.com/questions/40130/mysql-and-window-functions](http://dba.stackexchange.com/questions/40130/mysql-and-window-functions)が役立つ可能性があります。 –