Beste,

Ik wil graag een LIMIT van max 50 op mijn query zetten, maar ik heb er al een limit op staan.
<?
SELECT *
FROM $table
WHERE van = '".$_SESSION['UID']."'
ORDER BY datum DESC
LIMIT $start, $berichten_per_pagina";
?>
Kan ik deze query nog gebruiken daarvoor?
Moet er nog een query bijkomen?
Moet de query grondig worden aangepakt?

Mvg,

Erik
?

Je kunt toch simpel weg die LIMIT ... veranderden if...else...

<?
$sQuery = 'SELECT *
FROM $table
WHERE van = '".$_SESSION['UID']."'
ORDER BY datum DESC';

if(...)
{
$sQuery .= 'LIMIT $start, $berichten_per_pagina';
}
else
{
$sQuery .= 'LIMIT 50';
}
?>

Of begrijp ik je verkeerd...
Ik denk dat je het met 2 query's moet doen. wat je kan doen is eerst de limit uitvoeren en dan met een while het gaat uitlezen en zeggen wat wel en niet op de pagina moet staan. maar dat is wel een beetje energie verspilling. of je kan ook met php aangeven dat het id niet mer verder mag. dus de berichten_per_pagina gaan aanpassen als het boven de 50 komt
Hmm, wat je zou kunnen doen is de gebruiker "voor de gek houden".

Ervan uitgaande dat je 10 berichten per pagina's gebruikt, kan je bijvoorbeeld aangeven dat als $start > dan 41, dus dat die in dat geval over de 50 berichten gaat komen. Dat je dan $start de waarde 41 geeft. Dan kan je nooit verder terug kijken dan 50 berichten.

Volgens mij kan dat niet meer in SQL.
@ Martijn!,

Je begrijpt me indd niet goed.

$start = 0;
$berichten_per_pagina = 5;

Dit betekend dat er 5 berichten per pagina komen....
maar ik wil wel weer een max van 10 pagina's hebben.
Hoe doe ik dat ;)
Voor pagina nummering moet je toch altijd het aantal records tellen als je deze nu eens afkapt op 50.

if( aantal > 50 )
aantal = 50;
Met onderstaande code kan de gebruiker nooit verder komen dan bericht 50 :)

<?php
// Heb mijn uitleg een beetje verwerkt in het script en aangepast, nu moet het universeel zijn
if($start > ($max_aantal - $berichten_per_pagina +1){
$start = $max_aantal - $berichten_per_pagina +1;
}
//dan hier je query
?>
[edit]
In jouw geval geeft dit:
<?
if($start > (50-5+1){//46
$start=46;
}
?>

voor je query betekend dat 5 vanaf 46, dus 46, 47, 48, 49, 50
[/edit]

[edit]

Nog een edit

Het voordeel van deze methode is dat het gewoon blijft werken wanneer je het aantal berichten per pagina wijzigt, of wanneer je het maximum aantal berichten veranderd.
[/edit]
@ Robert,

Ik heb het nu zo:
<?
$max = 50;
if($start > ($max - $berichten_per_pagina +1))
{
$start = $max - $berichten_per_pagina +1;
}
$page_sent = "
SELECT *
FROM $table
WHERE van = '".$_SESSION['UID']."'
ORDER BY datum DESC
LIMIT $start, $berichten_per_pagina";
?>
Tevens heb ik 75 berichten in de db om mee te testen.
Ik blijf ze gewoon allemaal zien :(
echo $start dan eens, want dan gaat er wel ergens wat mis. (echo hem eens in de regel voor je query)
Ik zie zo geen fout, maar ik heb het hier getest met een query, en het werkt mooi..
op pagina 1 is start 0;
op pagina 2 is start 5;
op pagina 3 is start 10;
enz enz.
Maar ik bedoel op het moment dat je pagina 11 aanroept, (dan zou start als het goed is naar 46 terug moeten worden gezet)

Reageren