[PHP/mySQL]
Ik heb de volgende tabel
Dit is de tabel voor het opslaan van pagina's (met hun versies).
BV. Pagina met "npaginaid" 1 en "nversion" 1. Nieuwe versie: pagina met "npaginaid" 1 en "nversion" 2. Aan de hand van het gegeven dat "npaginaid" hetzelfde is, weet ik dat het om dezelfde pagina gaat.
Nu moet ik ook de gegevens gesorteerd kunnen weergeven, zowel op "sname" (naam van pagina) als "ntimestamp" (aanmaaktijd van pagina versie).
Het gaat erom dat ik een overzicht kan genereren van de nieuwste paginaversies (dus van alle pagina's de laatste versie), en deze gesorteerd op óf "sname" óf op "ntimestamp", met een offset van N van het begin.
Nu heb ik zelf het idee dat dit niet in 1 query kan. Daarom was ik van plan om eerst alle nieuwste versies op te halen:
Dit geeft het gewenste resultaat. Maar nu wil ik in volgende query's de betreffende pagina's ophalen (door middel van een loop in de programmacode (PHP, BTW).
({var} uit vorige query)
Allemaal leuk en aardig, maar niet gesorteerd. Met een simpele ORDER BY in de eerste query, gaat het niet goed.
Nu is de vraag dus: Hoe krijg ik het resultaat gesorteerd? De goede query(s)? Tips voor het dbmodel?
Ik heb de volgende tabel
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| CREATE TABLE `tbl_pages` ( `npaginaid` int(11) unsigned NOT NULL auto_increment, `nversion` int(11) unsigned NOT NULL default '1', `nauthorid` int(11) NOT NULL default '0', `ngroupid` int(11) NOT NULL default '0', `sname` varchar(255) NOT NULL default '', `scontents` text NOT NULL, `ntimestamp` int(11) NOT NULL default '0', `npublished` tinyint(1) unsigned NOT NULL default '0', `narchived` tinyint(1) unsigned NOT NULL default '0', `ndeleted` tinyint(1) unsigned NOT NULL default '0', `nhits` int(11) unsigned NOT NULL default '0', PRIMARY KEY (`npaginaid`,`nversion`), UNIQUE KEY `npaginaid` (`npaginaid`,`nversion`), KEY `npaginaid_2` (`npaginaid`,`nversion`,`nauthorid`,`ngroupid`) ) TYPE=MyISAM; |
Dit is de tabel voor het opslaan van pagina's (met hun versies).
BV. Pagina met "npaginaid" 1 en "nversion" 1. Nieuwe versie: pagina met "npaginaid" 1 en "nversion" 2. Aan de hand van het gegeven dat "npaginaid" hetzelfde is, weet ik dat het om dezelfde pagina gaat.
Nu moet ik ook de gegevens gesorteerd kunnen weergeven, zowel op "sname" (naam van pagina) als "ntimestamp" (aanmaaktijd van pagina versie).
Het gaat erom dat ik een overzicht kan genereren van de nieuwste paginaversies (dus van alle pagina's de laatste versie), en deze gesorteerd op óf "sname" óf op "ntimestamp", met een offset van N van het begin.
Nu heb ik zelf het idee dat dit niet in 1 query kan. Daarom was ik van plan om eerst alle nieuwste versies op te halen:
SQL:
1
2
| SELECT npaginaid, MAX(nversion) AS nversion FROM tpl_pages GROUP BY npaginaid LIMIT {offset N}, 5; |
Dit geeft het gewenste resultaat. Maar nu wil ik in volgende query's de betreffende pagina's ophalen (door middel van een loop in de programmacode (PHP, BTW).
SQL:
1
2
| SELECT * FROM tpl_pages WHERE npaginaid = {npaginaid} AND nversion = {nversion} LIMIT 1; |
({var} uit vorige query)
Allemaal leuk en aardig, maar niet gesorteerd. Met een simpele ORDER BY in de eerste query, gaat het niet goed.
Nu is de vraag dus: Hoe krijg ik het resultaat gesorteerd? De goede query(s)? Tips voor het dbmodel?
No amount of key presses will shut off the Random Bug Generator