[MySQL] laatste reactie user in forum

Pagina: 1
Acties:

  • nimm2
  • Registratie: Juni 2001
  • Laatst online: 01-04 22:24
ik maak voor mijn forum gebruik van de volgende query:

SELECT berichten.id, berichten.titel, berichten.status, MAX( reactie.datum ) AS maxdatum, MAX( reactie.datum ) , COUNT( reactie.reactieid ) , reactie.username
FROM berichten, reactie
WHERE berichten.id = reactie.topicid
GROUP BY reactie.topicid
ORDER BY maxdatum DESC LIMIT 0 , 30


resultaat is dat je de titel van het topic, aantal berichten en tijd laatste reactie gebruikt voor een topiclijst.

ik wil nu graag dat er naast de tijd van de laatste reactie de username komt te staan van degene die die laatste reactie heeft geplaatst. als ik reactie.username gebruik krijg ik gewoon de username van de topicstarter te zien.

weet iemand hoe dit moet?


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
ik heb een tabel berichten:

berichten
Field Type Null Default 
id   int(11) No    
titel   varchar(80) No    
datum   timestamp(8) Yes  NULL  
username   varchar(25) Yes  NULL  
status   tinyint(1) No  0  

Indexes : Keyname Type Cardinality Field 
PRIMARY  PRIMARY  280  id  
titel  UNIQUE  280  titel  

--------------------------------------------------------------------------------
en een tabel reactie

reactie
Field Type Null Default 
reactieid   int(11) No    
topicid   int(11) Yes  NULL  
text   text No    
datum   timestamp(14) Yes  NULL  
username   varchar(25) No

[ Voor 1% gewijzigd door nimm2 op 02-05-2003 15:30 . Reden: invoegen code tags (handig) ]


  • RM-rf
  • Registratie: September 2000
  • Laatst online: 14:29

RM-rf

1 2 3 4 5 7 6 8 9

nimm2 schreef op 02 May 2003 @ 14:17:
hebben jullie de smiley gezien? die is er per ongeluk ingeparsed
gebruik daarvoor de [code][/code]-tags

verder retourneert je Query een result in rows, de naam van de topicstarter zie je enkel als je enkel het eerste resultaat uitleest, lees je nu de laatste row uit krijg je die van de laatste poster (of tenminste die van de 30e, als er meer zijn dan 30, {...zie je LIMIT})

edit:
je hebt zowel een berichten-username alswel een reactie.username:

dit is een beetje verwarrend en volgens mij niet genormaliseerd: als de eerste post door de topicstarter gemaakt wordt is het onzinnig om ook een berichten.username te hebben, het zou theoretisch wat performancewinst opleveren, maar dat heeft pas zin zodra je erg bezoekers/post krijgt, het risico van corrupte data is iets dat je eerder zou moeten bekijken: dus -> normalisatie

[ Voor 33% gewijzigd door RM-rf op 02-05-2003 14:41 ]

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


Verwijderd

waarom heb je eigenlijk een aparte tabel voor berichten en reacties? zou je niet 1 tabel kunnen gebruiken met een parentID, die bij een nieuwe topic 0 is en bij de reacties de ID van de eerste post?

  • nimm2
  • Registratie: Juni 2001
  • Laatst online: 01-04 22:24
eh... nee, want dan sla je steeds de titel dubbel op.
op zich is dat niet erg natuurlijk

en die username kan ook weg.
maar het forum functioneert op dit moment prima!
de username die ik opsla in berichten is overigens wel erg makkelijk voor phpmyadmin, zodat ik kan zien welke gebruiker een topic is gestart.
verder wordt die username nergens voor gebruikt denk ik.

weet er iemand hoe ik met zo min mogelijk werk de username van de laatste poster bij deze query te zien kan krijgen?

[ Voor 69% gewijzigd door nimm2 op 02-05-2003 15:29 . Reden: aanvulling ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:17
Ik zou zeggen, ga met subselects aan de slag, maar dat kan nog altijd niet in MySQL dacht ik...

https://fgheysels.github.io/


  • MichelVH
  • Registratie: Oktober 2001
  • Laatst online: 01-08 09:33
Als je de id van de laatste reactie opslaat kan je m.b.v. joins een aantal leuke dingen doen :)

Don't be afraid of the dark, be afraid of what it hides


  • paulh
  • Registratie: Juli 1999
  • Laatst online: 22-06 15:30
Zolang je forum niet al te groot is is het met een query nog wel snel genoeg uit te rekenen. Maar als je forum begint te lopen zul je merken dat dat te traag zal worden. Ik raad je aan het aantal replies en de laatste user in de topic-tabel bij te werken. Dan hoef je dus bij het opvragen niet een join en/of een dure count te doen.

Mijn forum werkt op die manier en verwerkt per dag 40.000 page-hits zonder al te veel problemen op een dual-celeron 466.

[ZwareMetalen.com] - [Kom in aktie tegen de CO2 maffia]


  • nimm2
  • Registratie: Juni 2001
  • Laatst online: 01-04 22:24
ik heb het aangepast nav de laatste tips. op dit moment wordt de laatste poster tijdens het plaatsen van zijn reactie geregistreerd in de tabel berichten als laatste reactie. dit wordt weer in de query opgenomen

nu werkt het!
Pagina: 1