Jag håller på att skriva ett internt system där man kan skicka meddelanden till användare, mycket som de populära "samhällena" på webben. Varje användare ska se om de har läst meddelandet eller inte, olästa ska markeras med fet stil.
Så nu till min fråga: vad är det smidigaste sättet att göra detta för att undvika att servern får jobba onödigt mycket? Att ha en tabell med meddelandet och en kolumn om de har läst den eller inte?
Ibland kommer även det skickas ut standardmeddelanden till alla, och de ligger som en rad (till alla användare).
När en viss meddelande läses av en vissa medlem så lagras händelsen i ovanstående tavla.
Sedan i samma sql-fråga är du listar x antal rubrker på meddelanden så plockar du även med värdet för have_raead_message:
SELECT m.*, um.have_read_message FROM message AS m, user_message AS um, user AS u WHERE m.id = um.message_id AND um.user_id = u.id AND u.id = NUVARANDE_ANVÄNDARID ORDER by datum DESC LIMIT x
(Här förutsätter jag att du ha en tavla user som innehåller användarna samt tavlan message som innehåller meddelanden)
Sedan när du listar dessa rubriker så kollar du om have_read_message är 1 eller 0 (eller liknanande true/false). Är den 1 så har användaren läst och är den noll så...
med:
WHERE m.id = um.message_id AND um.user_id = u.id AND u.id = NUVARANDE_ANVÄNDARID
så kopplar du ihop rätta poster mellan tavlorna user och message genom en mellantavla (user_message).
SELECT m.*, um.have_read_message FROM message AS m, user_message, user AS u AS um WHERE m.id = um.message_id AND um.user_id = u.id AND u.id = NUVARANDE_ANVÄNDARID ORDER by datum DESC LIMIT x
Jag tror du råkade få in ett fel i SQL-koden. Borde det inte bli...?
SELECT m.*, um.have_read_message FROM message AS m, user_message[B] AS um, user AS u[/B] WHERE m.id = um.message_id AND um.user_id = u.id AND u.id = NUVARANDE_ANVÄNDARID ORDER by datum DESC LIMIT x