Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] sortowanie wyników
Forum PHP.pl > Forum > Przedszkole
motomeru
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.  
Daiquiri
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.
wookieb
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
motomeru
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.  

Daiquiri
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.
motomeru
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);
?>
Daiquiri
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.
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.