![](/img/trans.png)
[英]MYSQL PHP Order By Date and separate results into groups per each date
[英]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.