ugrás a tartalomhoz

Saját lapozó

GreenEar · 2014. Jan. 26. (V), 19.06
Sziasztok!

Egy lapozással kapcsolatban kérnék segítséget. Van a Weblaboron és azon túl rengeteg lapozó, de nem találom azt ami nekem igazán átlátható lenne.
A problémám az hogy lapozással kapcsolatban teljesen alap a tudásom (alap==0) és részletes leírást a logikájáról nem találtam.

Szeretném a lapozás menetét megérteni, és egy saját egyszerű lapozót írni.
A példa kedvéért az egy kereső programot írok be:


<form method="get">
<input type="text" name="searchword1" id="searchword1">
<input type="text" name="searchword2" id="searchword2">
<input type="text" name="searchword3" id="searchword3">
<button type="submit">Mehet</button>
</form>

MySql-Ből kérem le az adatokat, minden működik szépen. (tudom hogy escapelés stb kell rá de ezt a lekérdezést csak a példa miatt írtam).
A lekérés:


<?

require_once('connectvars.php');
  
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

$where = array();

if ($_GET['searchword1']) {

$where[] = "elsosor = '" . $_GET['searchword1'] . "'";

}

if ($_GET['searchword2']) {

$where[] = "masodiksor = '" . $_GET['searchword2'] . "'";

}

if ($_GET['searchword3']) {

$where[] = "harmadiksor = '" . $_GET['searchword3'] . "'";

}

$query = "SELECT * FROM tabla";

if(!empty($where)){  

	$query .= ' WHERE '.implode(' AND ', $where).'';  
}

$data = mysqli_query($dbc, $query); 

while ($row = mysqli_fetch_array($data)) { 

echo ''. $_row['adat'] .'';

}


?>

Hogy kezdjek neki a lapozásnak? Gondolom meg kell határoznom hány sor van amit lekér, mennyit szeretnék ha egy oldalon megjelenne, ...
Köszönöm előre is a segítséget és az infókat is ezzel kapcsolatban.
 
1

Vizualizáció

Hidvégi Gábor · 2014. Jan. 26. (V), 19.21
Amikor nekem kellett lapozót készítenem, lerajzoltam, mi az, amit szeretnék, hogy megjelenjen, aztán felírtam, hogy milyen változókat kell ehhez felhasználnom, ez után már csak meg kellett írni a kódot, mert pofonegyszerű az egész.
2

Szükséged lesz a sorok

Joó Ádám · 2014. Jan. 26. (V), 19.38
Szükséged lesz a sorok számára (COUNT() függvény), ebből, ha eldöntötted az egyszerre megjelenítendő sorok számát, megtudod, hány oldalad van, és a lapozó megjelenítésével készen vagy. Az adott oldal megjelenítéséhez pedig határt kell szabj a lekérdezett sorok számának, és meg kell add, hányadik sortól várod az eredményt (LIMIT és OFFSET záradék).

Döntsd el, hogy melyik irányból kezded a számozást (ha a legújabb az első, akkor egyszerűbb a lekérdezésed, de idővel vándorolnak a sorok; ha fordítva, akkor kicsit összetettebb az SQL, de a keresőből érkező látogatók a jó helyre érkeznek a listában), figyelj oda az összeadásra-szorzásra, és arra, hogy mi történik, ha túl nagy vagy kicsi számokat ad meg a felhasználó.
3

mysql esetében az

szabo.b.gabor · 2014. Jan. 27. (H), 17.01
mysql esetében az SQL_CALC_FOUND_ROWS is jó dolog lehet.

-- tehát a kiindulási pont kb ez
SELECT * FROM tabla;


-- aztán ráeresztesz egy limitet
SELECT * FROM tabla LIMIT 0,20;
-- így csak az első húszat kapod meg.

SELECT * FROM tabla LIMIT 20,20;
-- így 20-tól indulva kapod meg a következő 20 elemet

SELECT SQL_CALC_FOUND_ROWS * FROM tabla LIMIT 40,20;
SELECT FOUND_ROWS();
-- így megkapod 40-től indulva a köv 20 elemet, 
-- majd a következő lekéréssel (persze előtte még fetch-eled az elemeket) 
-- megkapod az összes elem számát.
4

Mérni kell

Hidvégi Gábor · 2014. Jan. 27. (H), 17.24
Amellett, hogy nem szabványos, érdemes megmérni a sebességét, nálunk párezer rekordos táblákban már sokkal gyorsabb volt két külön lekérdezést lefuttatni (az elsőben az össz rekordszámot lekérni, a másodikban pedig a LIMIT-tel), mint egyet az SQL_CALC_FOUND_ROWS-zal.