Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sortowanie tablicy
yavaho
post 29.07.2004, 21:09:32
Post #1





Grupa: Zarejestrowani
Postów: 449
Pomógł: 0
Dołączył: 26.05.2004
Skąd: Nowy Sącz

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


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?


--------------------
Książki informatyczneKsiążki biznesowe
Warsztat: notepad hardcore
Go to the top of the page
+Quote Post
Liko
post 30.07.2004, 09:59:09
Post #2





Grupa: Zarejestrowani
Postów: 436
Pomógł: 6
Dołączył: 8.11.2003
Skąd: Szczecin

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


Właśnie wywal DESC z zapytania wtedy powinno być dobrze.
Go to the top of the page
+Quote Post
rogrog
post 30.07.2004, 10:49:11
Post #3





Grupa: Zarejestrowani
Postów: 602
Pomógł: 1
Dołączył: 3.04.2004
Skąd: Trójmiasto (Gdańsk)

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


wywal DESC albo zamiast DESC zrób ASC w zapytaniu


--------------------
Go to the top of the page
+Quote Post
DeyV
post 30.07.2004, 23:20:27
Post #4





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




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.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
Parti
post 31.07.2004, 08:49:07
Post #5





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 22.07.2004

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


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.
Go to the top of the page
+Quote Post
yavaho
post 31.07.2004, 16:58:43
Post #6





Grupa: Zarejestrowani
Postów: 449
Pomógł: 0
Dołączył: 26.05.2004
Skąd: Nowy Sącz

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


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.

Ten post edytował yavaho 31.07.2004, 17:11:53


--------------------
Książki informatyczneKsiążki biznesowe
Warsztat: notepad hardcore
Go to the top of the page
+Quote Post
DeyV
post 31.07.2004, 18:12:46
Post #7





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




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


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
rogrog
post 31.07.2004, 19:19:30
Post #8





Grupa: Zarejestrowani
Postów: 602
Pomógł: 1
Dołączył: 3.04.2004
Skąd: Trójmiasto (Gdańsk)

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


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


--------------------
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 Wersja Lo-Fi Aktualny czas: 20.07.2025 - 06:00