Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> sortowanie otrzymanych wyników
maksik
post
Post #1





Grupa: Zarejestrowani
Postów: 206
Pomógł: 0
Dołączył: 26.09.2012

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
kartin
post
Post #2





Grupa: Zarejestrowani
Postów: 246
Pomógł: 79
Dołączył: 25.05.2010

Ostrzeżenie: (0%)
-----


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ść.
Go to the top of the page
+Quote Post
maksik
post
Post #3





Grupa: Zarejestrowani
Postów: 206
Pomógł: 0
Dołączył: 26.09.2012

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował maksik 15.07.2014, 13:17:53
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
maksik
post
Post #5





Grupa: Zarejestrowani
Postów: 206
Pomógł: 0
Dołączył: 26.09.2012

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował maksik 16.07.2014, 12:09:36
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 21:12