[PHP]Select met limit uit MYSQL vanwege paginas

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • WoutF
  • Registratie: Maart 2000
  • Laatst online: 13:34

WoutF

Hoofdredacteur
Topicstarter
Beetje vage titel, maar ik zal het uitleggen. Ik ben aan een site bezig waar op bepaalde stukken reacties geplaatst kunnen worden. Nu wil ik dat opsplitsen in pagina's, en het pagina nummer in de URL meegeven.

Qua coding is het niet moeilijk, maar volgens mij mis ik even het abstract denkvermogen om de (vast simpele) methode te bedenken.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if(!isset($_GET[page]))
{
    $current_page = 0;
}
else
{
    $current_page = $_GET[page];
}

$reacties_per_page = 2;
$begin = $reacties_per_page * $current_page;
$eind = $begin + $reacties_per_page;

$get_reactie = mysql_query("
SELECT  bablablabla
ORDER BY reacties.TIME ASC limit $begin,$eind");


Bij $page=0 laat hij 2 records zien ID=1 en ID=2. (limit 0,2)
Bij $page=1 laat hij 4 records zien. ID's 3/4/5/6 (limit 2,4)
Bij $page=2 laat hij weer maar 2 records zien. ID 5/6 (limit 4,6)

Bij $reacties_per_page = 1 werkt het ook niet. Bij $reacties_per_page = 3 weer wel

Wat klopt er niet aan deze methode?

Acties:
  • 0 Henk 'm!

  • blackd
  • Registratie: Februari 2001
  • Niet online
$eind is niet wat je denkt dat het is :P
mysql> SELECT * FROM table LIMIT 5,10; # Retrieve rows 6-15

9000Wp o/w SolarEdge SE6K - Panasonic 5kW bi-bloc - gasloos sinds 17-7-2023


Acties:
  • 0 Henk 'm!

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 30-08 11:55
LIMIT vereist geen begin en eind maar werkt met een begin en een AANTAL.

LIMIT 0,2 haalt dus 2 records op die begint bij rij 0.

LIMI 2,4 haalt dus 4 records op die begint bij rij 2.

dus $eind moet je vervangen door $reacties_per_page in de query :)


grmbl :(, ik ben te traag met posten :P

[ Voor 11% gewijzigd door twiekert op 29-05-2003 22:05 ]


Acties:
  • 0 Henk 'm!

  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 05-08 13:55
Ga ook eens het offset statement doorpluizen ;)

Acties:
  • 0 Henk 'm!

  • riotrick
  • Registratie: Mei 2002
  • Laatst online: 08-07 18:48
Het is verder ook nog wel handig om te checken op pagina's die buiten je bereik zitten. Dus stel je laatste pagina is 5 en iemand vraagt met de url pagina 9 op. dat moet je ook nog even afvangen. Zelf doe ik iets dergelijks op deze manier:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$sql = "SELECT count(*) AS count FROM nieuws";
$result = mysql_query($sql,$db);
$myrow = mysql_fetch_array($result);
$messagecount = $myrow[count]; // Totaal aantal nieuwsberichten
$perpage = "5"; // Aantal nieuwsberichten per pagina
$highestpage = ceil($messagecount / $perpage); // Hoogste pagina

if(!isset($page)) {
    $page = 1;
} elseif($page > $highestpage) {
    $page = $highestpage;
} elseif($page < 1) {
    $page = 1;
}

$toshow = ($page - 1) * $perpage; // Startnummer van eerste bericht op huidige pagina


$sql = "SELECT * FROM nieuws ORDER BY datum DESC LIMIT $toshow,$perpage";
$result = mysql_query($sql,$db);

[ Voor 9% gewijzigd door riotrick op 29-05-2003 22:56 ]

Facebook :: Twitter :: PSN


Acties:
  • 0 Henk 'm!

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 30-08 11:55
riotrick schreef op 29 May 2003 @ 22:54:
Het is verder ook nog wel handig om te checken op pagina's die buiten je bereik zitten. Dus stel je laatste pagina is 5 en iemand vraagt met de url pagina 9 op. dat moet je ook nog even afvangen. Zelf doe ik iets dergelijks op deze manier:

PHP:
1
2
3
$messagecount = $myrow[count]; // Totaal aantal nieuwsberichten
$perpage = "5"; // Aantal nieuwsberichten per pagina
;
dit zou eigenlijk moeten worden:

$messagecount = $myrow["count"]; // Totaal aantal nieuwsberichten
$perpage = 5; // Aantal nieuwsberichten per pagina

de kolom count is tekst en dient dan ook tussen quotes te staan.

het getal is een integer en geen string, quotes weg. :)

Acties:
  • 0 Henk 'm!

  • riotrick
  • Registratie: Mei 2002
  • Laatst online: 08-07 18:48
ja je hebt gelijk, was ook een snel in elkaar getikt scriptje :) en eigenlijk moet de $page variabele ook nog $_GET["page"] worden enzo, maar goed het ging even om het idee :)

Facebook :: Twitter :: PSN


Acties:
  • 0 Henk 'm!

  • Skef
  • Registratie: April 2001
  • Laatst online: 17-09 09:49

Skef

Ik scheer.me

twiekert schreef op 30 May 2003 @ 00:09:
[...]


dit zou eigenlijk moeten worden:

$messagecount = $myrow["count"]; // Totaal aantal nieuwsberichten
$perpage = 5; // Aantal nieuwsberichten per pagina

de kolom count is tekst en dient dan ook tussen quotes te staan.

het getal is een integer en geen string, quotes weg. :)
$messagecount = $myrow["count"];

Eigenlijk is deze dan ook verkeerd... Dit zou als volgt moeten:

$messagecount = $myrow['count'];

Dit zodat je niet in verwarring komt met de (wellicht elders gedefinieerde) constante count ;) ;)

"Computer games don’t affect kids: I mean if Pac-Man affected us as kids, we’d all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."


Acties:
  • 0 Henk 'm!

Verwijderd

Skef schreef op 30 May 2003 @ 08:31:
[...]


$messagecount = $myrow["count"];

Eigenlijk is deze dan ook verkeerd... Dit zou als volgt moeten:

$messagecount = $myrow['count'];

Dit zodat je niet in verwarring komt met de (wellicht elders gedefinieerde) constante count ;) ;)
Deze discussie is al eens gevoerd: http://gerard.yoursite.nl/got/php-tiplist/ :)

Acties:
  • 0 Henk 'm!

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 30-08 11:55
OK je hebt gelijk, tussen enkele quotes wordt niets geparsed. :)

voor snelheids winst hoef je het echter niet te doen ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Misschien heb je wat aan dit artikel: Pagina navigatie

Acties:
  • 0 Henk 'm!

  • WoutF
  • Registratie: Maart 2000
  • Laatst online: 13:34

WoutF

Hoofdredacteur
Topicstarter
Heel erg bedankt allemaal, het werkt perfect nu :)
Pagina: 1