Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sortowanie otrzymanych wyników
Forum PHP.pl > Forum > PHP
maksik
Witam

Mam skrypt który oblicza odległość w kilometrach od Punktu centralnego 51.547491, 21.164281 do Punktów końcowych skąd są pobierane z bazy dane longitude latitude i każdy z nich jest porównywany do Centralnego, gdzie z "while" otrzymuje wyniki:

1.5km

2.0km

1.3km

W jaki sposób mógłbym sortować te wyniki aby odrazu wyświetlały się w kolejności od najbliższego Punktu? dopisanie "order by" w query raczej odpada bo są tylko pobierane dane geograficzne
kartin
Pewnie w pętli wyświetlasz dane. Zamiast wyświetlania zapisuj je do tablicy, a później posortuj tablice i wyświetl dane.

Jeśli masz jeden punkt od którego obliczasz odległość do punktów zapisanych w bazie, to zamiast kilka razy obliczać odległość dla tego samego punktu, dodaj w bazie dodatkową kolumnę odległość. Przy dodawaniu punktu do bazy od razu obliczaj i zapisuj odległość.
maksik
Nie mogę tego zrobić tak, aby dopisywać do bazy odrazu odległość przy obliczaniu ponieważ centralny punkt może określić user czyli będzie dowolny i porównywany do danych z bazy, a jak z "tablicą" wyglądać może takie rozwiązanie, mowa o array?

Przykładowo mam funkcje sortującą array

  1. $fruits = array("lemon", "orange", "banana", "apple");
  2. sort($fruits);
  3. foreach ($fruits as $key => $val) {
  4. echo "" . $val . "\n";
  5. }


jak mogę go z tym wzorem zintegrować aby działał on na zapytanie z while? i sortowało zmienną $odlegosc?

  1. $query = mysql_query("SELECT * FROM zrzut Where id>'0'");
  2. while ( $query2 = mysql_fetch_array($query) )
  3. {
  4.  
  5. $odleglosc = round(distance($lat, $long, $query2['lat'], $query2['long'], "K"), 2);
  6. echo''.$odleglosc .'<br>';
  7.  
  8.  
  9. }
nospor
No przeciez ci napisano.... najpierw zapisuj do tablicy, a potem tablice sortuj....

  1. $tab = array();
  2. $query = mysql_query("SELECT * FROM zrzut Where id>'0'");
  3. while ( $query2 = mysql_fetch_array($query) )
  4.  
  5. {
  6. $odleglosc = round(distance($lat, $long, $query2['lat'], $query2['long'], "K"), 2);
  7.  
  8. //echo''.$odleglosc .'<br>';
  9. //ZAMIAST WYSWIETLAC MASZ ZAPISAC DO TABLICY
  10.  
  11. $tab[] = $odleglosc;
  12.  
  13.  
  14. }
  15. //TERAZ SOBIE TABLICE TAB POSORTUJ a potem ją wyswietl
maksik
Bardzo mi z tym pomogłeś i działa to jak należy tylko chciałbym jeszcze przesłać odrazu zmienną z while "$query2['nazwa']"

czyli tak by to miało wyglądać?

  1. $tab['odleglosc'] = $odleglosc;
  2. $tab['nazwa'] = $query2['nazwa'];


lub w ten sposób?

  1. $tab[] = $odleglosc;
  2. $tab[] = $query2['nazwa'];


z tym że mam problem z późniejszym wyświetleniem wtedy dwóch zmiennych aby były dopisane do siebie

  1. foreach ($fruits as $key => $val) {
  2. echo''.$val['nazwa'].' '.$val['odleglosc'].' km<br><br>';
  3.  
  4. }
nospor
Masz stworzyc tablice wielowymiarową:
  1. $tab[] = array('odleglosc' => $odleglosc, 'cosinnnego' => $cosinnego);

A potem posortowac przy pomocy
http://pl1.php.net/manual/en/function.array-multisort.php
Example #3 Sorting database results
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.