| 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: 11 let
|
|||
0