0

レストラン、ホテルなどの結果をリストするMySQLクエリがあります。各行には緯度と経度のデータがあります。

ユーザーが検索した場所からの距離で結果を並べ替える必要があります (ページが読み込まれるとすぐにその緯度と経度が得られます)。

また、2 つの緯度/経度のペアからキロメートル単位で距離を返す php 関数もあります。

distance($lat1,$lng1,$lat2,$lng2);

しかし、この距離でクエリ結果を並べ替えるにはどうすればよいでしょうか?

現時点では、クエリが単純であるとしましょう

mysql_query("select * from merchants");

そこに固執order by distance(latitude,longitude,'$center_lat','$center_long')すると、エラーが発生しますFUNCTION dbname.distance does not exist。ページがロードされたらすぐに距離を含む一時的なMySQLテーブルを作成し、それでソートすることを考えましたが、それはやり過ぎのようです。それは...ですか?

4

2 に答える 2

2

PHP 関数と同じことを行う MySQL 関数を作成できますか? 可能であれば、それが最も簡単で、最も効率的で、一般的に最善の方法です。関数のソース コードを投稿していただければ、distance()MySQL への変換を検討します。

それができない場合は、PHP で並べ替えを実行する必要があります。使用する場合は比較的簡単ですarray_multisort()(例 #3 データベースの結果の並べ替え を参照)。

<?php

  // Connect to database, yada yada yada

  // Do the query
  $query = "
    SELECT *
    FROM merchants
  ";
  $result = mysql_query($query);

  // Fetch the results into a 2 dimensional array.
  // Also create an array with the results of the distance function
  $rows = $sortcol = array();
  while ($row = mysql_fetch_assoc($result)) {
    $sortcol[] = $row['distance'] = distance($row['latitude'], $row['longitude'], $center_lat, $center_long);
    $rows[] = $row;
  }

  // Sort the results
  array_multisort($sortcol, SORT_ASC, $rows);

  // Rows should now be sorted
  print_r($rows);
于 2012-05-17T09:26:24.560 に答える
0

関数を実行するために、MySql サーバー プロセスが PHP プロセスをどのように呼び出すと思いますか?

これは機能しません-SQLは過去50年間、そのように機能していません。

文字列を SQL サーバーに送信します。ホストではなく、そこで評価可能でなければなりません。あなたのMySqlは明らかに関数を知りません。

于 2012-05-17T09:18:26.903 に答える