Ik zit met een probleem, ik wil al mijn topics ophalen van de database en sorteren op 2 dingen, namelijk sticky en op op laatst geposte bericht uit een topic.
Het probleem zit het hem in het sorteren op het laatst geposte bericht.
Structuur:
-- topics --
topic_ID
gebruiker_ID
titel
bericht
datum
sticky
-- berichten --
bericht_ID
gebruiker_ID
topic_ID
bericht
datum
Het gaat eigenlijk alleen om de SQL query waar ik een probleem ondervind, datastructuur van de database is in mn beginpost al geplaatst en is de code verder ook niet relevant imo.
[edit]
Het kan natuurlijk heel vies om een veld bij topic toe te voegen en die te updaten zodra er een nieuwe post is gemaakt, maar er moet een betere en mooiere oplossing zijn.
Het is misschien beetje krom uitgelegd vandaar even een voorbeeldje:
select * from topics as t, berichten as b
where t.topic_ID=b.topicID
order by t.sticky, b.datum ASC
Nu krijg je alleen ook alle posts terug... Denk niet dat dat de bedoeling is. Dan moet je een left of een right join oid gebruiken, maar daar heb ik geen verstand van :x
Ik denk dat je een tabel extra nodig hebt voor het gelezen hebben van topics. Een tabel waar je 4 velden hebt, nl. read_id, topic_id, user_id, read.
Als een gebruiker een nieuw bericht post wordt bij alle users in de tabel de "read" op 0 gezet. bij het uitlezen controleer je gewoon of de huidige gebruiker het al gelezen heeft door een SELECT query op deze tabel los te laten.
SELECT
t.topic_ID,
t.gebruiker_ID,
t.titel,
(
SELECT
datum
FROM
berichten
WHERE
topic_ID = t.topic_ID
ORDER BY
datum DESC
LIMIT 1
) AS datumLaatsteBericht
FROM
topics AS t
ORDER BY
sticky ASC,
datumLaatsteBericht DESC