Archief - PHP/MYSQL: forum algoritme

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Le Preinz

Legacy Member
Ik dacht dat ik het m'n probleem had opgelost (zie enkele threads hieronder) maar nu blijkt dat ik eigenlijk het probleem op zich niet goed begrepen had.

Ik zit dus met 2 tables. 1 met 'topics' en 1 met 'comments' . Nu zouden deze zo gesorteerd moeten worden zoals op een forum. Dus een lijst van alle topics gesorteerd volgens laatste comment. Maar waar ik in de vorige thread niet aan dacht is het feit dat topics zonder comments ook boven kunnen staan als ze nog geen post hebben maar wél later gezet zijn dan comments uit andere topics.
Ik zie dus niet hoe ik dit moet gaan sorteren want nu sorteren de topics niet zoals het moet zijn.

Ik zoek dus in eerste instantie de werkwijze en als het kan meteen de bijhorende query.

Extra nuttige info:
PHP:
CREATE TABLE `proj` (
  `title` varchar(25) NOT NULL default '',
  `description` mediumtext NOT NULL,
  `date` varchar(25) NOT NULL default '0000-00-00',
  `userid` int(6) NOT NULL default '0',
  `numba` int(10) NOT NULL auto_increment,
  PRIMARY KEY  (`numba`)
) TYPE=MyISAM AUTO_INCREMENT=485 ;

numba_in verwijst naar numba in table proj
CREATE TABLE `comments` (
  `bericht` mediumtext NOT NULL,
  `datum` datetime NOT NULL default '0000-00-00 00:00:00',
  `userid` int(6) NOT NULL default '0',
  `numba_in` varchar(10) NOT NULL default '',
  `numba` int(10) NOT NULL auto_increment,
  PRIMARY KEY  (`numba`)
) TYPE=MyISAM AUTO_INCREMENT=144 ;

killgore

Legacy Member
gebruik mysql date types ffs ipv een varchar (DATE in de table proj) en insert op curdate

oplossing probleem:
Bij ophalen van topics haal je via join's de datum op van de meest recente comment (wat dus iets NULL zal leveren als er geen comment is). ALs die datum leeg is gebruik je als datum de post time van je topic.

Zo moeilijk toch niet :).

Le Preinz

Legacy Member
wat is die insert op curdate?

Ik snap wat je wil zeggen over de oplossing maar snap niet hoe je meteen in uw query die if statement steekt 'indien topic date > date laatste comment andere topic' ==> sorteer op topic, anders sorteer op comment.

dJeez

Legacy Member
Maak het nu toch niet moeilijker dan nodig is, zet in de proj tabel een veld bij met daarin de datum van de laatst geposte comment. In eerste instantie zet je daar de creatiedatum in van de thread, en als er een comment gepost werd pas je die datum aan. Poepsimpel, eenvoudige query èn geen nodeloze belasting van de DB. Af en toe denormaliseren mag.

killgore

Legacy Member
dJeez zei:
Maak het nu toch niet moeilijker dan nodig is, zet in de proj tabel een veld bij met daarin de datum van de laatst geposte comment. In eerste instantie zet je daar de creatiedatum in van de thread, en als er een comment gepost werd pas je die datum aan. Poepsimpel, eenvoudige query èn geen nodeloze belasting van de DB. Af en toe denormaliseren mag.
mag ik er u op wijzen dat dit ong. compleet hetzelfde systeem als mij is en dat het jouwe zelfs zoveel minder belastend niet is (moet altijd extra update doen als je een comment maakt).

dJeez

Legacy Member
Die update is verwaarloosbaar, het is bij forums nl. algemeen geweten dat het consulteren veel frequenter voorkomt dan het updaten (toevoegen) van informatie. En bij een drukbezocht forum levert dat dus een enorm performantieverschil op (caching kan wat dat betreft ook een oplossing bieden uiteraard).

killgore

Legacy Member
dJeez zei:
Die update is verwaarloosbaar, het is bij forums nl. algemeen geweten dat het consulteren veel frequenter voorkomt dan het updaten (toevoegen) van informatie. En bij een drukbezocht forum levert dat dus een enorm performantieverschil op (caching kan wat dat betreft ook een oplossing bieden uiteraard).
updaten qua admin gedeelte => ja, comments & replies & whatever zijn echter zaken aan user gedeelte, die worden veel vaker toegepast als gewoon bekeken ;).

Ik denk dat over het algemeen gezien onze methoden niet zoveel verschillen zijn hoor. Want al bij al moet jij toch ook nog een join doen en bestaat mijn join gewoon uit 1 selectie-clausule meer (om het recentste comment op te halen).
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan