簡體   English   中英

如何根據PHP和MySQL中2個單獨表的結果排序

[英]How to order by results from 2 separate tables in PHP and MySQL

我正在嘗試將2個SQL查詢的結果輸出到一個JSON文件。 問題是我想將它們按距離升序排列,這是方程的結果,該方程式從用戶表中獲取了homelat和homelon,從位置表中獲取了lat,lng(基本上取一個點和另一個點的經度和緯度進行計算)這些點之間的距離)。 是否可以從兩個選擇查詢中獲取一些參數,對其進行計算並以升序輸出結果?

$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));

因此,生成的數組應類似於:

'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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM