Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie tablicy
Forum PHP.pl > Forum > PHP
yavaho
Jak wyświetlić wynik z bazy danych w odwrotnym kierunku.
Albo w którym miejscu powinienem posortowac tablice.

Mam baze danych w ktorej zapisywane sa komentarze. Pobieram z niej 10 ostatnich komentarzy takim zapytaniem:
  1. <?php
  2.  $query = &#092;"SELECT * FROM $komentarze ORDER BY data DESC LIMIT 10\";
  3.  $result = @mysql_query($query);
  4.  if($result && @mysql_num_rows($result) > 0) {
  5. while($row = mysql_fetch_array($result)) {
  6. // wyswietlanie danych 
  7. print('<p>'.$row['data'].'</p>');
  8. }
  9.  }
  10. ?>
Takie zapytanie zwraca mi te komentarze posortowane od najnowszych do najstarszych. Ale ja che je wyswietlic w odwrotnej kolejnosci. Mozna tu zastosowac komende rsort? albo uruchomic petle w odwrotnym kierunku?
Liko
Właśnie wywal DESC z zapytania wtedy powinno być dobrze.
rogrog
wywal DESC albo zamiast DESC zrób ASC w zapytaniu
DeyV
Nie przeczytaliście dokładnie problemu.

Osiągnąć dokładnie to co potrzebujesz, można na 2 sposoby.

1. możesz zadać zapytanie sprawdzające ile jest wierszy w bazie, a następnie pobrać ostatnie 10, przy zachowaniu takiego sortowania jakie potrzebujesz, tj. ASC

2. możesz również pobierać dane tak jak teraz, tyle tylko, że zamiast wyświetlać je od razu, zapisać je w tablicy, sprawdzić jej wielkość, i wyświetlić je przy pomocy for odliczającego wstecz.
Parti
Cytat(DeyV @ 2004-07-31 00:20:27)
Nie przeczytaliście dokładnie problemu.

Osiągnąć dokładnie to co potrzebujesz, można na 2 sposoby.

Jesli dobrze zrozumialem o co chodzi autorowi tematu, to jest jeszcze jeden sposob.

Ogolnie chodzi o to, ze chcemy wybrac 10 najstarszych rekordow, ale wynik chcemy miec posortowany od najmlodszego do najstarszego.

Mozna to zrobic tak:
  1. (SELECT * FROM tab ORDER BY DATA DESC LIMIT 10 ) UNION (SELECT * FROM tab WHERE id < 0) ORDER BY DATA


Uwaga 1: to drugie zapytanie musi byc tak skonstruowane, zeby nie zwrocilo zadnego rekordu.

Uwaga 2: tutaj w "User comments" znajdziecie rozwiazanie tego problemu ale w takiej postaci:
  1. (SELECT * FROM table_name ORDER BY ranking DESC LIMIT 5 ) ORDER BY ranking;
jakkolwiek u mnie to nie dziala prawidlowo. Natomiast to, ktore podalem wczesniej dziala.
yavaho
Wlasnie o takie zapytanie mi chodzilo jakie napisal Parti
  1. (SELECT * FROM tab ORDER BY DATA DESC LIMIT 10 ) UNION (SELECT * FROM tab WHERE id < 0) ORDER BY DATA


Dla tych co mnie nie zrozumieli to przedstawie o co mi chodziło
Mam baze danych w ktorej zapisuje komentarze. Najnowsze komentarze zapisywane sa oczywiscie na koncu bazy. Rekordy w bazie wygladaja mniej wiecej tak:

2004-07-01
2004-07-02
2004-07-03
2004-07-04
2004-07-05

Ja chcialem pobrac z tej bazy powiedzmy 3 najnowsze komentarze czyli:

2004-07-03
2004-07-04
2004-07-05

I chcialem je wyswietlic posortowane jak wyzej.
Ale to bylo nie mozliwe. Poniewaz dzieki standardowemu zapytaniu aby wybrac z bazy 3 rekordy trzeba bylo ja posortowac w odwrotnym kierunku (czyli zastosowac DESC). I wynik jaki otrzymywalem byl taki:

2004-07-05
2004-07-04
2004-07-03

DeyV zrozumial moj problem, ale ja w dalszym ciagu nie umialem znalezc odpowiedniego zapytania do bazy.
DeyV
moje 1 rozwiązanie wymagało 2 zapytań.
(Zapis jest oczywiście skrótem myślowym winksmiley.jpg )
  1. $ilosc = SELECT Count (*) FROM TABLE

  1. SELECT * FROM TABLE ORDER BY DATA LIMIT $ilosc -10, 10
rogrog
a może wykorzystać pomocnicza tablice i ja posortowac??

  1. <?php
  2. $tablica = Array();
  3.  
  4. $query = &#092;"SELECT * FROM $komentarze ORDER BY data DESC LIMIT 10\";
  5.  
  6. $result = @mysql_query ( $query );
  7.  
  8. if( $result && @mysql_num_rows ( $result ) > 0 ) {
  9.  
  10. while( $row = mysql_fetch_array ( $result ) ) {
  11. // do tablicy
  12. $tablica[] = $row['data'];
  13. }
  14.  
  15.  //sortowanie lub tez odwrocenie kolejnosci
  16.  $tablica = array_reverse ( $tablica ); //chyba mozna by tez uzyc krsort()
  17.  
  18.  //wyswietlamy
  19. foreach( $tablica as $value ){
  20.  echo '<p>'.$value.'</p>';
  21. }
  22. }
  23. ?>
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.