0

我有一个 MySQL 查询列出餐馆、酒店等的结果。每一行都有纬度和经度数据。

我需要按相对于用户搜索位置的距离对结果进行排序(一旦加载页面,我就有了纬度和经度)。

我还有一个 php 函数,它从两个 lat/lng 对返回以公里为单位的距离:

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()(查看Example #3 Sorting database results):

<?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 回答