Kako najbolje izvesti ispis iz goleme baze
Zanima me i logika i kako to izvesti.
Pricaj je prosta. Iz baze bi mozda imao ispis i 30 redova recimo. Ne zelim da mi prikazuje sve ispise odjednom (oticice stranica u q. isto u ucitavanje). Hocu ovako jednostavno kao na forumu. 10 ispisa iz baze pa stranica 1, ako imas 21 ispis da napise i stranica 3 i tako dalje. na svakoj stranici da imam link za prethodnu i sledecu stranu... koja je logika.... bojanje negde u bazi ili u aplikaciji ? dakle sql bi jedno trebao da mi vratim samo prvih 10 u nekom drugom slucaju da mi vrati 11-20 ukljucujuci i te granice... tnx |
Kôd:
SELECT <nesto> FROM <tabela> <uslov> LIMIT 0,10 Kôd:
SELECT <nesto> FROM <tabela> <uslov> LIMIT 10,10 Kôd:
SELECT <nesto> FROM <tabela> <uslov> LIMIT 20,10 Ako imaš linkove obeležene sa 1, 2, 3, ... onda možeš da prosleđuješ promenljivu $page sa vrednostima 1,2,3 ... a u SQL upitima staviš LIMIT ".($per_page*($page - 1))." , ".$per_page." gde je $per_page broj rekorda po strani koji je bio 10 u gornjim primerima. |
Ili koristiš neki frejmvork koji ima straničenje.
|
@BluesRocker
znac li to da i forum tako funkcionise.... preko sql-a radi granice ? hvala za detaljno objasnjenje tnx mada sada mi pade nesto napamet. treba da radim nesto novo a imam i vec staro. 1. kod starog ako sam dobro razumeo morao bih da menjam linkove (koristi se get) tako da to znaci odmah i pad seo ? I evo ovaj primer. default bi bilo SELECT <nesto> FROM <tabela> <uslov> LIMIT 0,10 i sta kako da izvedem da ako ima vise zapisa od 10 da mi napise strana 2, ako ima vise od 20 da napise strana 3 i tako dalje ? Odradim pre tog upita upit sa count da vidim koliko imam redova, pa to strpam u promenljivu. pa kazem if($promenljiva > 10) { $brstrana = 2; } else if($promenljiva > 20) {$brstrana = 3; } ne znam da li me razumete... saznam ja broj rodova preko count-a, ali kako sad da mu kazem ako ima vise od 30 bice 3 stranice, ako ima vise od 100 bice preko 10 stranica i da mi ispisuje redne brojeve stranica ??? ili bolje da radim prethodna i sledeca ? if else ili ima nesto elegantnije ? @jablan e ovo nemam pojma kako se radi :) i cemu to sluzi :P hehe |
http://en.wikipedia.org/wiki/Web_application_framework
Al bolje prvo nauči kako se ručno pravi... Jeste, prvo uradiš count da vidiš koliko ima ukupno, i onda for petljom (od 1 do count/broj_po_stranici) ispišeš linkove za sve stranice. |
Imaš na netu gotove klase za straničenje. Samo sam pokušao da ti objasnim kako funkcioniše.
Kako da znaš koliko ima strana? count(*) -> $broj_rekorda $broj_strana = ceil($broj_rekorda/$broj_rekorda_po_strani); $broj_rekorda_po_strani - ovo nek ti bude neka konstanta Možeš i da postaviš uslov koje će stranice da se ispisuju, prva, druga, ... izabrana, ... pretposledna, poslednja, prethodna, sledeća. |
ok nabudzicu nesto...
niste se osvrnuli na SEO. da li na vec postojeci sajt i strane koji primaju parametre preko get metode implementirati ovo stranicenje ? Ako sam dobro razume, kada bi neko kliknuo recimo na stranu "3" morala bi da se prenese i ta promenljiva preko get metode i to bi postao novi link.. jedino da u osnovnom linku nista ne menjam vec da ide samo ispis sa limitom, a kada se klikne da se otvara satro nova stranica sa novim linkom... time stari link ostaje isti i google ce i dalje njega gledati lepo a ove nove ce pre ili kasnije indeksirati ?! jesam li upravu evo sad se setih.... pomenuo count pa i vi nastavili... valjda mogu i sa funkcijom mysql_num_rows($res); deluje mi da je ovako brze jer ima "samo" jedan upit a sa countom bi bilo 2 upita ?? |
off : moram da dodam komentar na svoj post jer mi fali opcija edit ?!
evo skinuo sam ovo http://www.phpclasses.org/browse/package/2185.html i prilagodio svojoj bazi. radi mi lepo samo prvu stranicu... stavim limit 5 ima samo 5 stavim limit 24 ima samo 24, ali gde god da klinem na one linkove 1,2 next dobijam samo index stranu a url se promeni sa page=1 na page=2 i tako dalje.... valja li ova klasa uopste... i jel ja to imam neku gresku !? |
mysql_num_rows ti vraca broj rekorda u rezultatu. Posto ti koristis LIMIT ti ces uvek da imas isti broj rezultata, tipa 10 ili koliko vec namestis.
Postoji lepsa fora od ovog Bojanovog, koja koristi jedan upit, a to je sledece: Kôd:
SELECT SQL_CALC_FOUND_ROWS <nesto> |
Citat:
na ovo sam totalno zaboravio :1027: ovo cu probati.... a ona klasa mi i dalje brljavi :( |
Vreme je GMT +2. Trenutno vreme je 06:07. |
Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.