PHP ve MySQL 2 ayrı tablo sonuçlarına göre sipariş nasıl

1 Cevap php

Ben bir JSON dosyası 2 sql sorguları çıkış sonuçlarına çalışıyorum. Sorun onlara kullanıcılar tablosundan homelat ve homelon alır ve yerleri tablodan enlem, LNG denklemin sonucu olan mesafelerine göre artan sipariş etmek istiyorum olmasıdır. (Temelde lattitude ve boylamını bir noktadan başka alır ve hesaplar Bu nokta arasındaki mesafe). Bu, her iki Seçme sorguları bazı parametreleri alır hesaplamak ve artan çıktı sonuç mümkün mü?

$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 Cevap

Yani edilen dizisi gibi bir şey olmalıdır:

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

usort sıralamak için kullanın.

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

EDIT: Üzgünüm,% 100 soru okumak vermedi. Solüsyonu (gerçi değil büyük bir) Revize. Bu dizi kendisinde mesafenin hesaplanması gerekmektedir. Ve zaman kazanmak için, kare kökü yapmıyoruz.

EDIT 2: Final sonucu.

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