[PHP/MySQL] Sorteren op datum van laatste post

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • WoBBeL
  • Registratie: Juni 2004
  • Laatst online: 11-09 13:01
Ben al een halve dag een het knutselen met een SQL query van mij.

Deze query haalt een lijst met topics op met de username van de poster, telt het aantal reacties en sorteert hem op status id (0 = sticky, 1 = normaal, 2 = gesloten).

Nu wil het topic ook sorteren op datum van laatste post...maar het probleem wat ik met de volgende query heb is dat hij naar de datum kijkt van de 1e post, en niet van de laatste post!

Hoe los ik dat precies op?

code:
1
2
3
4
5
6
7
8
9
SELECT *, count(postId) 
FROM forum_topics 
INNER JOIN users 
ON ( forum_topics.auteurId = users.userid ) 
LEFT JOIN forum_post 
ON ( forum_topics.topicId = forum_post.topicId )
WHERE categoryId = '" . $SQL_id . "' 
GROUP BY forum_topics.topicId  
ORDER BY forum_topics.status ASC, forum_post.datum DESC

Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
code:
1
ORDER BY MAX(forum_post.datum) DESC


Maar ze zullen hier vast beginnen over dat je een wildcard gebruikt in je SELECT en de velden die je niet gebruikt in je GROUP BY een AGGREGATE functie moet meegeven, anders is je output ONbetrouwbaar (zie http://dev.mysql.com/doc/...n/group-by-functions.html).
En gelijk hebben ze :)

[ Voor 11% gewijzigd door radem205 op 28-04-2010 10:27 ]


Acties:
  • 0 Henk 'm!

  • WoBBeL
  • Registratie: Juni 2004
  • Laatst online: 11-09 13:01
radem205 schreef op woensdag 28 april 2010 @ 10:21:
code:
1
ORDER BY MAX(forum_post.datum) DESC


Maar ze zullen hier vast beginnen over dat je een wildcard gebruikt in je SELECT en de velden die je niet gebruikt in je GROUP BY een AGGREGATE functie moet meegeven, anders is je output betrouwbaar (zie http://dev.mysql.com/doc/...n/group-by-functions.html).
En gelijk hebben ze :)
Dank je!

De wildcard zit er nog in voor test functies ;) ik ga straks alleen de belangrijke velden eruit halen (scheelt toch geheugen en snelheid?)

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Qua performance kun je wellicht beter de datum van de laatste post opslaan in topic row, scheelt een dikke join.

Acties:
  • 0 Henk 'm!

  • Tjeemp
  • Registratie: Januari 2005
  • Laatst online: 03-01-2015

Tjeemp

BEER N TEA

Sowieso vraag ik me af waarom je twee aparte tabellen gebruikt voor topics en posts?
In principe is de data in een topicstart praktisch hetzelfde als in een reply post. Je voegt in een topic alleen inderdaad zo'n status toe en misschien nog wat andere optionele parameters. Heb zelf ook een keer een forumpje gebouwd en ik gebruikte geloof ik gewoon een topic_id of parent_id die bij de topicstart op 0 staat en bij de reacties op de id van de topicstart.

Scheelt je toch al weer het aanroepen van een extra tabel en kan straks zoekfunctionaliteiten waarschijnlijk ook makkelijker maken.

[ Voor 8% gewijzigd door Tjeemp op 28-04-2010 10:55 ]

www.timovanderzanden.nl | Beer 'n' Tea


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Een topicstart is wel een post maar het topic zelf is wel anders imo. Een topic is niks meer dan een verzameling van posts met een naam, een wezenlijk verschil met een post die alleen een post bevat.

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
Tjeemp schreef op woensdag 28 april 2010 @ 10:53:
Sowieso vraag ik me af waarom je twee aparte tabellen gebruikt voor topics en posts?
In principe is de data in een topicstart praktisch hetzelfde als in een reply post. Je voegt in een topic alleen inderdaad zo'n status toe en misschien nog wat andere optionele parameters. Heb zelf ook een keer een forumpje gebouwd en ik gebruikte geloof ik gewoon een topic_id of parent_id die bij de topicstart op 0 staat en bij de reacties op de id van de topicstart.

Scheelt je toch al weer het aanroepen van een extra tabel en kan straks zoekfunctionaliteiten waarschijnlijk ook makkelijker maken.
Een topic heeft ook een parent forum (dwz het forum waar het topic onder valt), en een post heeft een topic waar het bij hoort. Dit zou je allemaal in de posts tabel kunnen zetten, maar dat wordt vaak gezien als slecht ontwerp.

Het plaatsen van de laatste post datum in de topics tabel is wel een mogelijke optimalisatie, echter onthoudt wel dat als je dat gaat doen dat je ook logica moet toevoegen voor het synchroom houden van de post datum tussen de posts en de topics tabel. Hoedt je ook voor 'premature optimization'.
Pagina: 1