Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/sql] Pager
Forum PHP.pl > Forum > PHP
Beynar
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.
1010
zysk, albo w pysk...

albo robisz zliczanie ile masz rekordów, albo nie określasz ile masz stron...
marcio
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
Beynar
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
Cysiaczek
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.
Beynar
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!
seaquest
Jest jeszcze coś takiego jak SQL_CALC_FOUND_ROWS w zapytaniu select.

Całkiem niezłe...
seaquest
@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.
nrm
@seaquest: z benchmarkami jest już tak, że zawsze będą dyskusyjne. ale jest jeszcze coś przeciw sql_calc => niekompatybilność z innymi bazami.
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.