Как заказать по результатам из 2 отдельных таблиц в PHP и MySQL - PullRequest
2 голосов
/ 19 марта 2010

Я пытаюсь вывести результаты 2 запросов sql в один файл JSON.Проблема в том, что я хотел бы упорядочить их по возрастанию по расстоянию, которое является результатом уравнения, которое берет homelat и homelon из таблицы пользователей и lat, lng из таблицы местоположений (в основном это берет широту и долготу одной точки и другой и вычисляетрасстояние между этими точками).Можно ли взять некоторые параметры из обоих запросов select, вычислить их и вывести результат в порядке возрастания?

$wynik = mysql_query("SELECT homelat, homelon FROM users WHERE guid='2'") or 
die(mysql_error()); ;

$query = "SELECT * FROM locations WHERE timestamp";
$result = map_query($query);
$points = array();

while ($aaa = mysql_fetch_assoc($wynik)) {

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

    array_push($points, array('name'=>$row['name'], 'lat'=>$row['lat'], 
'lng'=>$row['lng'], 'description'=>$row['description'], 
'eventType'=>$row['eventType'], 'date'=>$row['date'],
        'isotime'=>date('c', ($row['timestamp'])), 'homelat'=>$aaa['homelat'], 
'homelon'=>$aaa['homelon']));

}
echo json_encode(array("Locations"=>$points));

1 Ответ

1 голос
/ 19 марта 2010

Таким образом, результирующий массив должен выглядеть примерно так:

'name' => 'something',
'lat' => 'something',
'lng' => 'something',
'description' => 'something',
etc.

Используйте usort для сортировки.

usort($array, 'sortByOption');
function sortByOption($a, $b) {
  $distA = dist($a['homelat'], $a['homelong'], $a['lat'], $a['long']);
  $distB = dist($b['homelat'], $b['homelong'], $b['lat'], $b['long']);
  return strcmp($distA, $distB);
}
function dist($x1, $y1, $x2, $y2) {
  return pow($x2 - $x1, 2) + pow($y2 - $y1, 2);
}

РЕДАКТИРОВАТЬ: Извините, 100% не прочитал ваш вопрос. Пересмотрено для решения (хотя и не очень). Вы должны рассчитать расстояние в самом массиве. И чтобы сэкономить время, не делайте квадратный корень.

РЕДАКТИРОВАТЬ 2: Окончательный результат.

while ($aaa = mysql_fetch_assoc($wynik)) {
  while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    array_push($points, array('name'=>$row['name'], 
                               'lat'=>$row['lat'], 
                               'lng'=>$row['lng'], 
                       'description'=>$row['description'], 
                         'eventType'=>$row['eventType'],
                              'date'=>$row['date'],
                           'isotime'=>date('c', ($row['timestamp'])), 
                           'homelat'=>$aaa['homelat'], 
                           'homelon'=>$aaa['homelon'],
                          'dist'=>dist($aaa['homelat'], $aaa['homelon'], $row['lat'], $row['lng'])
    ));
  }
}
usort($points, 'sortByDist'); // This sorts the points!
echo json_encode(array("Locations"=>$points));
function sortByDist($a, $b) {
  return strcmp($a['dist'], $b['dist']);
}
function dist($x1, $y1, $x2, $y2) {
  return pow($x2 - $x1, 2) + pow($y2 - $y1, 2);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...