Autor | Zpráva | ||
---|---|---|---|
Michall Profil * |
#1 · Zasláno: 7. 1. 2016, 16:07:31
Zdravim,
mam v kode nasledovny dotaz na vytiahnutie riadkov z DB. $recordset=$conn->Execute('SELECT * FROM wiml_history ORDER BY date DESC'); $rs=$recordset->GetArray(); if(is_array($rs)) { foreach($rs as $row) { include('barh.php'); } } To mi vytiahne vsetky riadky z DB, viem spravit obmedzenie cez LIMIT 100 napriklad.
Otazka je: Ako spravit vytiahnutie vsetkych riadkov z DB, ale zobrazit napr. po 100 riadkoch na jednu stranku, dalsich 100 na druhu stranku, atd... Klasicky prepinac stranok. Vopred dakujem za radu. |
||
RastyAmateur Profil |
Michall:
Dělá se to již v MySQL příkladu. SELECT * FROM wiml_history ORDER BY date DESC LIMIT 100 OFFSET 1 - OFFSET znamená odkud. Takže když chceš 100 záznamů z databáze, a budeš na 3. stránce, tak dáš offset 100*3. Já to používám např. takto:
$_GET["offset"] = isset($_GET["offset"]) ? $_GET["offset"] : 0; $limit = 100; $offset = $_GET["offset"]*$limit; # Tady to potřebuje kontrolu, zda-li je to číslo, apod. $select = $mysqli->query("SELECT * FROM table WHERE neco=neco ORDER BY date DESC LIMIT ".$limit." OFFSET ".$offset." "); while($row = $select->fetch_assoc()) ... Když chceš upravit počet na stránku, pouze změníš $limit . Doufám, že je to alespoň trochu jasné...
|
||
Michall Profil * |
#3 · Zasláno: 7. 1. 2016, 17:01:08
To je na mna moc komplikovane. Jednoduchsie a viac polopatisticky by som to potreboval vysvetlit.
|
||
RastyAmateur Profil |
V tom případě bych skusil toto:
$limit = 100; $page = 3; # Toto je příklad, to je prostě číslo stránky. Jestli to budeš mít z $_GET nebo ne, to již je tvoje věc. Znovu opakuji, že v případě, že to máš z $_GET tak je nutné to ošetřit!!! $recordset=$conn->query('SELECT * FROM wiml_history ORDER BY date DESC'); $result = array(); while($row = $recordset->fetch_assoc()){ $result[] = array("prvni_parametr_z_db" => $row["prvni_parametr_z_db"], "druhy" => $row["druhy"]); #doufám, že toto chápeš... } for($i = $page*$limit;$i <= $page*$limit+$limit;$i++){ echo "Databáze vrátila jako první parametr: ".$result[$i]["prvni_parametr_z_db"]." a jako druhý: ".$result[$i]["druhy"]; } Myslím si, že to není tak složité. Snad to je správně. Nejsem si jistý s ($i = $page*$limit;$i <= $page*$limit+$limit;$i++) , ale mělo by to jít. ovšem ve for() jsem ještě nikdy nenásobil... Kdyby to nešlo, pošli, jakou to hází chybu.Ještě abych to asi vysvětlil: První řádek - určuješ limit výsledků na stránku. Druhý řádek - stránka Třetí řádek - dotaz na databázi Čtvrtý řádek - vytvoření pole pro zápis výsledku Pátý - sedmý řádek - Nacpání dat do databáze Osmý - desátý řádek - výpis. Chápeš alespoň ten výpis? |
||
Keeehi Profil |
RastyAmateur:
Mělo by to být správně, jen v tomto případě se tahá vždy zbytečně celá tabulka. Michall by se měl snažit pochopit [#2]. Je to efektivnější a myslím si že i srozumitelnější než ty 2 cykly v druhé ukázce. |
||
RastyAmateur Profil |
Keeehi:
Já to vím, ovšem Michall řekl, že by raději jednodušší postup. Já ho chápu. Já také když se snažím udělat něco složitějšího s db, a zde na diskusi mi někdo poradí SQL dotaz, který nechápu, tak raději udělám pomalejší a zdlouhavější dotaz v PHP, který ovšem chápu. Na druhou stranu, v tomto případě je PHP dotaz složitější než ta SQL verze... |
||
Časová prodleva: 9 let
|
0