Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[mysql] Limit 0,15 twee maal andersom?

Pagina: 1
Acties:
  • 228 views sinds 30-01-2008
  • Reageer

  • Martine
  • Registratie: Mei 2002
  • Niet online
Stel: er zijn op een fotoalbum 18 reacties gekomen. op iedere pagina staan 15 reacties.

Voor de eerste pagina, de query
select * from reacties where albumid = XX order by post_date asc limit 0, 15
Er zullen dus 15 reacties weergegeven worden, prima niets mis mee.

Maar er zijn meer dan 15 reacties, dus er wordt een tweede pagina aangemaakt. Echter, deze tweede pagina wordt direct tijdens het bezoek meteen weergegeven omdat hier onderaan de nieuwste reacties staan. Alleen kom er op de pagina maar 3 reacties omdat die query zo is

select * from reacties where albumid = XX order by post_date asc limit 15, 15

Wat mijn bedoeling is dat ik graag, als de laatste (hoogste) pagina altijd 15 reacties bevat, de laatste tevens de oudste pagina, pagina 1 dus, heeft dus de 3 reacties. Hoe los ik het op?

  • dik_voormekaar
  • Registratie: April 2003
  • Laatst online: 20-11 21:01
Alleen order by post_date asc vervangen door desc

Verwijderd

Eerst het aantal reacties uitvinden met SELECT COUNT reactie_id FROM reacties where albumid = XX;

En dan kun je wel verder denk ik ;)

  • Martine
  • Registratie: Mei 2002
  • Niet online
dik_voormekaar schreef op maandag 07 januari 2008 @ 09:42:
Alleen order by post_date asc vervangen door desc
Ja, dan zal de nieuwste reactie bovenaan de pagina komen en dat is niet de bedoeling.

[ Voor 50% gewijzigd door Martine op 07-01-2008 09:45 ]


  • Swaptor
  • Registratie: Mei 2003
  • Laatst online: 15-10 19:25

Swaptor

Java Apprentice

Klinkt als een standaard pagination-probleem.
Moet voldoende voor te vinden zijn lijkt me?

Ontdek mij!
Proud NGS member
Stats-mod & forum-dude


  • Martine
  • Registratie: Mei 2002
  • Niet online
Ja, als ik het getal 18 op hebt gevist, dan doe het volgende

PHP:
1
2
3
4
if ($allreactions < 15)
  $from = ($allreactions - 15); // output 3

$query = "select * .. bla bla limit ".$from.",15";


Maar, als ik dan naar de eerste pagina ga, krijg ik daar weer gewoon 15 reacties te zien, dus dat lost ook niet echt zoveel op. 8)7

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Dit is echt niet zo moeilijk, volgens mij heb je gewoon nog niet helder welke rijen je precies wil. Noem de rijen chronologisch 1 t/m 18 en leg nog eens uit welke rijen in welke volgorde je wil zien.

{signature}


  • Martine
  • Registratie: Mei 2002
  • Niet online
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
// $row['number'] is het totaal aantal reacties
// $maxreactitems is 15
// $page is de huidige pagina

if ($page == ceil($row['number']/$maxreactitems)) {
    $from = ($row['number'] - $maxreactitems);
}
elseif ($page == 1) {
    $maxpages = ceil($row['number']/$maxreactitems);
    $maxreactitems = ($row['number']-($maxreactitems*($maxpages-1)));
}

$limit = " LIMIT ".$from.", ".$maxreactitems;


Het werkt prima, maar als ik er nu zo tevreden over ben... ehh,... nee... }:O Iedereen toch bedankt voor de inzet! _/-\o_

[ Voor 0% gewijzigd door Martine op 07-01-2008 10:21 . Reden: En ja, ik ben gek op haakjes! :P ]


  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 13:41

--MeAngry--

aka Qonstrukt

Iets wat misschien niet zo mooi is, maar wel een oplossing voor je probleem biedt:

Je records gewoon ophalen met de nieuwste reacties bovenaan, dus met een ORDER DESC op post_date, en vervolgens de resulterende array uit de query omdraaien. (array_reverse()). Dan krijg je in ieder geval altijd de juiste hoeveelheid reacties op je pagina, en in de juiste volgorde. De volgorde van je pagina's is dan wel omgedraaid, pagina 1 bevat de laatste reacties, pagina 2 de reacties ervoor etc.

Het is geen mooie oplossing, en als je veel reacties op 1 pagina wilt laten zien, ook geen snelle, maar je paginering is dan ook alles behalve logisch.
Persoonlijk zou ik enkel kiezen uit, of de eerste reactie bovenaan pagina 1, of de laatste reactie bovenaan pagina 1.

Tesla Model Y RWD (2024)


  • Martine
  • Registratie: Mei 2002
  • Niet online
Ik begrijp je idee volkomen --MeAngry--, dat zou ook een mooie oplossing zijn. Het probleem is een beetje dat er soms wel wat een verhaal in de reacties zin, het is dan lastig dat je alleen de eerste (nieuwste) reactie ziet staan.

Maar(!!!) ik heb het weer anders bedacht, ik maak er gewoon een pagina 'Last page' bij, net als hier op het forum. Standaard laat hij deze pagina zien, klik je op de laatste pagina, tsja, dan is het prima als hier maar een reactie op staan. Wat vindt je hier van?

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
apart dat je het dan geen probleem vind.... maar ok...
ik zou gewoon de query met DESC doen en omgekeerd doorloopen. Een paginering waarbij de laatste reacties op pagina 1 staan lijkt mij ook simpel te verhelpen.. je weet tenslotte ook je totale aantal pagina's....

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Edwardvb schreef op maandag 07 januari 2008 @ 10:50:
ik zou gewoon de query met DESC doen en omgekeerd doorloopen.
Alleen is het totaal niet intuitief als reacties in chron. volgorde lijken te staan en de pagina's in de omgekeerde volgorde. Als je je gebruiker wil verwarren en zeker wil weten dat ik nooit meer op een paginanavigatielink durf te klikken moet je het vooral zo implementeren. :P

{signature}


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
ik zeg toch ook dat de pagina's niet in omgekeerde volgorde hoeven? (ik ben niet zo'n ster in helder formuleren, maar dat bedoelde ik wel met dit:
Een paginering waarbij de laatste reacties op pagina 1 staan lijkt mij ook simpel te verhelpen.. je weet tenslotte ook je totale aantal pagina's....
Pagina: 1