Autor Zpráva
Michall
Profil *
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 *
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...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: