Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] sortowanie wyników, sortowanie wyników
motomeru
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.10.2010

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


Panowie dopiero co zaczynam raczkować w PHP i dlatego stąd moja nachalność... z góry dziękuję krecikowi za ostatnią pomoc smile.gif od wczoraj nie mam zielonego pojęcia jak sortować wyniki ze zmiennej z podanego poniżej skryptu.
Przed obelgami na mój temat proszę o wyrozumiałość. Skrypt działa już poprawnie niestety nie wiem jak posortować wyniki z $odleglosc od najmniejszej liczby.


  1. <?php
  2. $sz1 = $_POST['sz1'];
  3. $wy1 = $_POST['wy1'];
  4.  
  5. $query = mysql_query("SELECT Identyfikator, szerokosc, dlugosc, bts_id, bts_name FROM obiekty2 WHERE Identyfikator>0") or die(mysql_error());
  6. if (!$query) {
  7. echo('<div>Problem podczas pobierania listy!</div>');
  8. }
  9. echo '<table width="80%" border="1"><tr><td align="center"><b>ID</b></td><td align="center"><b>szerokosc</b></td><td align="center"><b>dlugosc</b></td><td align="center"><b>ODLEGLOSC</b></td><td align="center"><b>BTS_ID</b></td><td align="center"><b>BTS_NAME</b></td></tr>';
  10.  
  11.  
  12. while ($row = mysql_fetch_array($query))
  13. {
  14.  
  15. $ID = $row['Identyfikator'];
  16. $szerokosc = $row['szerokosc'];
  17. $dlugosc = $row['dlugosc'];
  18. $bts_id = $row['bts_id'];
  19. $bts_name = $row['bts_name'];
  20.  
  21. $odleglosc = rad2deg(acos(sin(deg2rad($sz1)) * sin(deg2rad($szerokosc)) + cos(deg2rad($sz1)) * cos(deg2rad($szerokosc)) * cos(deg2rad($wy1-$dlugosc)))) * 111.18957696; ;
  22.  
  23.  
  24. echo ('<tr>');
  25.  
  26. echo "<td align=\"left\">$ID</td>";
  27. echo "<td align=\"left\">$szerokosc</td>";
  28. echo "<td align=\"left\">$dlugosc</td>";
  29. echo "<td align=\"left\">$odleglosc</td>";
  30. echo "<td align=\"left\">$bts_id</td>";
  31. echo "<td align=\"left\">$bts_name</td>";
  32.  
  33.  
  34. }
  35.  
  36. echo '</table>';
  37. mysql_free_result($result);
  38. ?>
  39.  
Go to the top of the page
+Quote Post
Daiquiri
post
Post #2





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Musisz je gdzieś najpierw zapisać, a z tego co widzę, nadpisujesz jedną zmienną $odleglosc. Jeżeli dane zapiszesz w tablicy np. $tab[$i] wtedy będzie łatwiej.
Go to the top of the page
+Quote Post
wookieb
post
Post #3





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Wyliczenia wartości $odleglosc musisz zaimplementować w zapytaniu i TAM sortowac
  1. SELECT (... tutaj twoje wyliczenia ..) AS odleglosc
  2. ORDER BY odleglosc DESC


Listę funkcji matematycznych masz tutaj http://dev.mysql.com/doc/refman/5.0/en/mat...-functions.html


--------------------
Go to the top of the page
+Quote Post
motomeru
post
Post #4





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.10.2010

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


OK potworzyłem zgodnie z Twoją radą tablice ale to zbytnio mi nie pomogło... Gdzieś robię pewnie kuriozalny błąd... Wielka flaszka się należy za pomoc.

  1. <?php
  2. $sz1 = $_POST['sz1'];
  3. $wy1 = $_POST['wy1'];
  4.  
  5. $query = mysql_query("SELECT Identyfikator, szerokosc, dlugosc, bts_id, bts_name FROM obiekty2 WHERE Identyfikator>0") or die(mysql_error());
  6. if (!$query) {
  7. echo('<div>Problem podczas pobierania listy!</div>');
  8. }
  9. echo '<table width="80%" border="1"><tr><td align="center"><b>ID</b></td><td align="center"><b>szerokosc</b></td><td align="center"><b>dlugosc</b></td><td align="center"><b>ODLEGLOSC</b></td><td align="center"><b>BTS_ID</b></td><td align="center"><b>BTS_NAME</b></td></tr>';
  10.  
  11.  
  12. $licznik = 0;
  13.  
  14. while ($row = mysql_fetch_array($query))
  15. {
  16.  
  17. $table[$licznik]['ID'] = $row['Identyfikator'];
  18. $table[$licznik]['szerokosc'] = $row['szerokosc'];
  19. $table[$licznik]['dlugosc'] = $row['dlugosc'];
  20. $table[$licznik]['bts_id'] = $row['bts_id'];
  21. $table[$licznik]['bts_name'] = $row['bts_name'];
  22.  
  23. $table[$licznik]['odleglosc'] = rad2deg(acos(sin(deg2rad($sz1)) * sin(deg2rad($table[$licznik]['szerokosc'])) + cos(deg2rad($sz1)) * cos(deg2rad($table[$licznik]['szerokosc'])) * cos(deg2rad($wy1-$table[$licznik]['dlugosc'])))) * 111.18957696;
  24.  
  25. echo ('<tr>');
  26.  
  27. echo "<td align=\"left\">".$table[$licznik]['ID']."</td>";
  28. echo "<td align=\"left\">".$table[$licznik]['szerokosc']."</td>";
  29. echo "<td align=\"left\">".$table[$licznik]['dlugosc']."</td>";
  30. echo "<td align=\"left\">".$table[$licznik]['bts_id']."</td>";
  31. echo "<td align=\"left\">".$table[$licznik]['bts_name']."</td>";
  32. echo "<td align=\"left\">".$table[$licznik]['odleglosc']."</td>";
  33. $licznik++;
  34.  
  35. }
  36.  
  37. uasort($table, 'cmp');
  38.  
  39.  
  40. echo '</table>';
  41. mysql_free_result($result);
  42. ?>
  43.  
  44.  

Go to the top of the page
+Quote Post
Daiquiri
post
Post #5





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Dane z posortowanej tablicy znajdują się poniżej while(). Dlatego musiałbyś zastosować procedurę: pobranie danych, sortowanie i wyświetlenie, jeżeli chcesz to zrobić w ten sposób.
Go to the top of the page
+Quote Post
motomeru
post
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.10.2010

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


Mogę Ciebie poprosić o nakierowanie w sprawie wyplucia tych danych? Człowiek o godz. 16.00 miał wyjść z pracy a stwierdził że zrobi przydatną rzecz dla innych... a tu taki klops...

znalazlem takie coś ale nie potrafię tego użyć
<?php
// Obtain a list of columns
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}

// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>

Ten post edytował motomeru 7.02.2011, 19:44:16
Go to the top of the page
+Quote Post
Daiquiri
post
Post #7





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Po prostu jeżeli chcesz to zrobić w ten sposób musisz najpierw pobrać dane, a potem je wyświetlić. Musiałbyś:
- usunąć wyświetlanie komórek tabelki z while(),
- posortować dane w tablicy $table,
- poniżej sortowania wyświetlić dane z tablicy $table, np.
  1. $ile = count($table);
  2. for ($i=0; $i<$ile; ++$i) {
  3. // wyświetlasz co chcesz, chociażby:
  4. echo "<td align=\"left\">".$table[$ile]['odleglosc']."</td>";
  5. // itd.
  6. }
Resztę dodajesz analogicznie smile.gif.
Powód edycji: [Daiquiri]:
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 10:53