Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php/sql] Pager
Beynar
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 6.12.2007

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


Nie mam pomysłu jak napisać pager.
Problem polega na tym, ze gdy skieruje zapytanie sql do bazy z klauzlą LIMIT np. 40, 70 to nie wiem ile tak naprawdę rekordów mam całej tabelce, a pod wyświetlonymi wynikami przydałoby się wypisać pokolei linki do kolejnych stron: 1,2,3,4,5 ale jak je moge wypisać skoro nie wiem ile rzeczywiście rekordów mam w tabelce?

Moge wydobyć liczbe wierszy za pomocą drugiego zapytania SELECT COUNT(ID) FROM tablename ale to jest już kosztowna operacja...
Bez liczby wszystkich wierszy nie moge wypisac na dole ile jest stron, z kolei zliczenie ich nie jest możliwe bez wybrania całosci.
Moge zrobic SELECT na wszystkim bez LIMITu, i robić paging w php ale to mija się z celem.
Go to the top of the page
+Quote Post
1010
post
Post #2





Grupa: Zarejestrowani
Postów: 749
Pomógł: 37
Dołączył: 3.10.2006

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


zysk, albo w pysk...

albo robisz zliczanie ile masz rekordów, albo nie określasz ile masz stron...


--------------------
Go to the top of the page
+Quote Post
marcio
post
Post #3





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Ze co??Po co ci link do wszystkich stron?Pomysql sobie jak bedziesz mial 100 stron jak to bedzie wygladalo daj tylko linki do poprzednia|nastepna i << pierwsza >> ostatnia biggrin.gif


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Beynar
post
Post #4





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 6.12.2007

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


Nawet jesli dam poprzednia i nastepna a LIMIT bedzie mi zbieral po 50 to bede musial sprawdzac czy istnieje rekord LIMIT + 1 czyli 51 (na stosie wyników) i poprzedni czyli -1.
Pozatym duzo lepszy jest interfejs gdzie mozesz skakać nie tylko o 1 do prozdu i 1 do tyłu, na początek i na koniec.
Cytat(marcio @ 31.12.2007, 13:46:52 ) *
Pomysql sobie jak bedziesz mial 100 stron...

Wyobrazam sobie wlasnie powyzsza sytuacje ze mam 100 stron i nawigacje: pierwszy, poprzedni, nastepny, ostatni i chce sie dostac na 50 strone smile.gif
50 kliknięć, żeby ondlaezc interesujące mnie dane
bezsens.
A tak to mam np:

<<<pierwsza <poprzednia ...11,12,13,14,15,16,17,18,19... nastepna> ostatnia>>

Jak na google

Ten post edytował Beynar 31.12.2007, 13:56:13
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #5





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Za bardzo się martwisz. Zapytanie z COUNT() jest dość wydajne i na pewno nie zabije Ci bazy.

Kod
mysql> select count(id) from lyrics;
+-----------+
| count(id) |
+-----------+
|    285797 |
+-----------+
1 row in set (0.00 sec)


Myślę, że powyższy kod zamyka temat ;]

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
Beynar
post
Post #6





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 6.12.2007

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


Masz racje @Cysiaczek juz zanim przeczytalem Twojego posta doszedlem do tego samego
COUNT jest szybki, natomiast nigdy nie stosujcie w takich sytuacjach mysql_num_rows(mysql_query("SELECT * tylko po to by wydobyc ilosc wierszy
SELECT * generuje zbiór wynikowy natomiast COUNT generuje tylko liczbe wierszy tak jak przedstawil to powyzej @Cysiaczek

pzdr!
Go to the top of the page
+Quote Post
seaquest
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

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


Jest jeszcze coś takiego jak SQL_CALC_FOUND_ROWS w zapytaniu select.

Całkiem niezłe...


--------------------
Michał Płachta
Warsztat: Mac OS X Leopard, PostgreSQL, Text Mate, Retrospectiva + SVN
Go to the top of the page
+Quote Post
nrm
post
Post #8





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


http://www.mysqlperformanceblog.com/2007/0...alc_found_rows/


--------------------
Go to the top of the page
+Quote Post
seaquest
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

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


@normanos: ja robiłem testy na bazie dużo mniejszej, ale za to prawdziwej, a nie generowanej. I SQL_CALC_FOUND_ROWS było szybsze.

Zresztą wiele zależy od wersji MySQL. W starszych wersjach było dużo gorzej. Jednak z tego co wyczytałem w ticketach zostało to poprawione.


--------------------
Michał Płachta
Warsztat: Mac OS X Leopard, PostgreSQL, Text Mate, Retrospectiva + SVN
Go to the top of the page
+Quote Post
nrm
post
Post #10





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


@seaquest: z benchmarkami jest już tak, że zawsze będą dyskusyjne. ale jest jeszcze coś przeciw sql_calc => niekompatybilność z innymi bazami.


--------------------
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: 21.08.2025 - 07:39