Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sortowanie malejące, wypisanie rosnące
Siela
post
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 1
Dołączył: 28.02.2005
Skąd: Gdańsk

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


Chciałbym wypisać 30 największych rekordów, z bazy danych rosnąco. Nie wiem jak temu podołać... jak biorę zapytanie w tym stylu:
  1. <?php
  2. select * from tabela ORDER BY kolumna ASC LIMIT 30
  3. ?>

To pobiera mi rosnąco, ale dane z początku tabeli, a potrzebuje tylko te z końca. Jak korzystam z:
  1. <?php
  2. select * from tabela ORDER BY kolumna DESC LIMIT 30
  3. ?>

To faktycznie mam tylko te dane które mnie interesują, ale jak wypisuje to wypisuję je malejąco zamiast rosnąco...

Nie wiem jakim zapytaniem poprawnie mi posortuje i wybierze dane :/
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 17)
.radex
post
Post #2





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


  1. <?php
  2. while($wynik = mysql_fetch_object(mysql_query("select * from tabela ORDER BY kolumna DESC LIMIT 30")))
  3. {
  4.  echo $wynik->kolumna;
  5. }
  6. ?>


To co podałeś jest (chyba) ok, najprawdopodobniej źle to wyświetlasz.

Ten post edytował radex_p 25.05.2008, 19:00:47


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
Siela
post
Post #3





Grupa: Zarejestrowani
Postów: 27
Pomógł: 1
Dołączył: 28.02.2005
Skąd: Gdańsk

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


Ale to nie o to chodzi...

Przykładowo
  1. <?php
  2. select * from tablica ORDER BY kolumna DESC
  3. ?>


daje mi taki wynik:

a b c d e f g h i j k l m n

Natomiast:
  1. <?php
  2. select * from tablica ORDER BY kolumna DESC LIMIT 4
  3. ?>


zwraca:

a b c d

A interesują mnie dane:

k l m n
Go to the top of the page
+Quote Post
.radex
post
Post #4





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


to zrób jednak ASC i następnie na tablicę która zostanie wygenerowana daj array_reverse.


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
Siela
post
Post #5





Grupa: Zarejestrowani
Postów: 27
Pomógł: 1
Dołączył: 28.02.2005
Skąd: Gdańsk

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


  1. <?php
  2. $query='select * from tablica ORDER BY kolumna ASC LIMIT 20';
  3. $wynik=mysql_query($query);
  4. $wynik=array_reverse($wynik);
  5. ?>


Tak? Czy jak? No chyba, że jeszcze:
  1. <?php
  2. while($row=mysql_fetch_array($wynik))
  3. {
  4. $tablica[]=$row;
  5. }
  6. $tablica=array_reverse($tablica);
  7. ?>

Czy może tak?
Go to the top of the page
+Quote Post
.radex
post
Post #6





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


Drugi sposób.


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
Siela
post
Post #7





Grupa: Zarejestrowani
Postów: 27
Pomógł: 1
Dołączył: 28.02.2005
Skąd: Gdańsk

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


Ale czy to nie będzie zbyt czasochłonne i obciążające dla serwera? Tym bardziej, że to będzie się odświeżało w miarę często... Może lepiej używać
  1. <?php
  2. LIMIT $ilosc_rekordow-20, $ilosc rekordow
  3. ?>


To raczej nie będzie aż takie obciążające... Tylko jak skomponować zapytanie do bazy tego typu?
Go to the top of the page
+Quote Post
.radex
post
Post #8





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


Jeśli nie masz dużej ilości rekordów to nie ma co się bawić.

btw. pomogłem?


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
Shili
post
Post #9





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


W takiej formie drugim zapytaniem. Lepiej chyba stworzyć nawet dwudziestoelementową tablicę.
Go to the top of the page
+Quote Post
Siela
post
Post #10





Grupa: Zarejestrowani
Postów: 27
Pomógł: 1
Dołączył: 28.02.2005
Skąd: Gdańsk

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


Ale to ma być Shoutbox w AJAX`ie więc zapytania i wywołania skryptu będą co kilka, kilkanaście sekund. Więc może obciążać.
Go to the top of the page
+Quote Post
.radex
post
Post #11





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


No i co z tego? Skoro ograniczasz za pomocą LIMIT to szuka tylko tych, których potrzebujemy.

Skończyły się czasy, kiedy ludzie się ściagają, kto napisze szybszy program wyświetlający piksel w assemblerze. biggrin.gif


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
Siela
post
Post #12





Grupa: Zarejestrowani
Postów: 27
Pomógł: 1
Dołączył: 28.02.2005
Skąd: Gdańsk

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


Weź mnie tu o Assemblerze nie wspominaj ... -.-" Jeszcze się za mną ciągnie to kolejny rok...

W każdym razie mam takie zboczenie biggrin.gif

  1. <?php
  2. SET @a=(SELECT COUNT(*) from tabela)-20;
  3. SET @b=(SELECT COUNT(*) from tabela);
  4. PREPARE STMT from 'select * from tabela ORDER BY nazwa LIMIT ?, ?';
  5. EXECUTE STMT USING @a, @b;
  6. ?>


Może przy wykorzystaniu tych zmiennych SQL`owych?
Go to the top of the page
+Quote Post
Shili
post
Post #13





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Proponuję tylko raz zliczyć COUNT'a i wykorzystać już otrzymaną zmienną. Mimo wszystko ograniczasz zapytania do dwóch.

ps. ETI? winksmiley.jpg
Go to the top of the page
+Quote Post
Siela
post
Post #14





Grupa: Zarejestrowani
Postów: 27
Pomógł: 1
Dołączył: 28.02.2005
Skąd: Gdańsk

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


Yep ETI tongue.gif

W każdym razie to coś nie działa do końca... Jakieś pomysły? Szukam w googlach jakiś materiałów na temat takiego rozwiązania ale nic nie chce znaleźć ciekawego :/
Go to the top of the page
+Quote Post
Shili
post
Post #15





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Równie dobrze możesz to zrobić na phpie (dwa zapytania, chociaż i tak mam wrażenie, że tablica lepiej nadawałaby się do tego celu):
  1. <?php
  2. $query = "zapytanie z count(*)";
  3. $result = mysql_query($query);
  4. $row = mysql_fetch_row($result);
  5. $limitA = row[0];
  6. $limitB = $limitA - 20;
  7. $query = "zapytanie z $limitA i $limitB";
  8. ?>

Chyba, że koniecznie chcesz to zrobić tylko mysql'owo.

Ten post edytował Shili 25.05.2008, 20:15:37
Go to the top of the page
+Quote Post
Siela
post
Post #16





Grupa: Zarejestrowani
Postów: 27
Pomógł: 1
Dołączył: 28.02.2005
Skąd: Gdańsk

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


Tzn teraz to już w sumie tylko z ciekawości chce jedynie mysql`owo to zrobić...
Go to the top of the page
+Quote Post
Kicok
post
Post #17





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


  1. SELECT * FROM ( SELECT * FROM tabela ORDER BY kolumna DESC LIMIT 30 )
  2. ORDER BY kolumna ASC


Nie wiem czy w dokładnie takiej postaci będzie działać, ale założenie jest chyba jasne.


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
Siela
post
Post #18





Grupa: Zarejestrowani
Postów: 27
Pomógł: 1
Dołączył: 28.02.2005
Skąd: Gdańsk

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


  1. SELECT tabela.* FROM ( SELECT * FROM shoutbox ORDER BY `date` DESC LIMIT 30 ) AS tabela ORDER BY `date` ASC


SUPER! biggrin.gif
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: 20.08.2025 - 20:20