Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wyciagniecie ostatnich wierszy z wyniku zapytania
sobstel
post
Post #1





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


PROBLEM

wyciągnięcie ostatnich X wierszy z wyniku zapytania (cos jak limit ale dla ostatnich, a nie pierwszych wierszy)

przykladowo
  1. SELECT *
  2. FROM posts
zwraca 1000 wierszy, a ja chcialbym tak skonstruowane zapytanie, ktory zwrociloby np. 50 ostatnich wierszy z tego co zwraca w/w zapytanie...


ROZWIĄZANIE

1. mozna uzyc DESC a potem po stronie php posortowac z powrotem we wlasciwej kolejnosci, ale to dla mnie kombinowanie, nie licząc narzutu...

2. mozna zrobic najpierw SELECT COUNT(*) a potem 2-gie wlasciwie zapytanie podstawiajac w LIMIT otrzymany COUNT(*) minus ilość wierszy do wyciągnięcia. ale to ciagle 2 zapytania.

bylbym rad gdyby dalo sie to jakos zrobic w jednym zapytaniu. ma ktos jakies pomysly?

Ten post edytował sopel 1.12.2005, 19:58:49


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


  1. SELECT *
  2. FROM tabela ORDER BY id DESC LIMIT x


A potem array_reverse().

Co w tym złego :?:
Go to the top of the page
+Quote Post
sobstel
post
Post #3





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


Cytat(mike_mech @ 2005-12-01 20:40:33)
  1. SELECT *
  2. FROM tabela ORDER BY id DESC LIMIT x


A potem array_reverse().

Co w tym złego :?:

powiedzmy, ze chce wyciagnac ostatnich 1000 wierszy. najpierw sortowanie po stronie SQL a potem array_reverse jest stosunkowo kosztowne - zdecydowanei zalatwienie tego jednym zapytaniem byloby o niebo wydajniesz - pytanie czy sie da?


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


No pewnie ze wydajniejsze - znajdz takie.
Mozna by przechowywac ilosc rekordow w innym rekordzie i potem
  1. SELECT ... LIMIT t.ilosc_rekordow - 1000, t.ilosc_rekordow

ale nie wiem czy SQL to przyjmie

----
Cytat
(...)A potem array_reverse().
Co w tym złego :?:

Cytat
powiedzmy, ze chce wyciagnac ostatnich 1000 wierszy. najpierw sortowanie po stronie SQL a potem array_reverse jest stosunkowo kosztowne

Co do sortowania: i tak zawsze* sortujesz
  1. SELECT *
  2. FROM tab ORDER BY id ASC/DESC

wiec kierunek nie ma znaczenia, a array_reverse() jest prosta funkcja/szybka - O( n ).

*) Jedynie gdy nie wykonujesz zadnego sortowania
  1. SELECT *
  2. FROM tab

stracisz na tej metodzie -- ale kiedy uzyjesz tego SQLa??, kolejnosc dodawania rekordow nie musi byc odzwierciedlana przez ich kolejnosci przy takim zapytaniu.

Ten post edytował dr_bonzo 1.12.2005, 20:52:28


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
SongoQ
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


  1. SELECT
  2. *
  3. FROM ( SELECT *
  4. FROM tabela ORDER BY id DESC LIMIT x
  5. )
  6. ORDER BY id ASC


--------------------
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: 19.08.2025 - 14:31