webForumDet fria alternativet

Internt meddelandesystem: läst eller inte?

PHP

3 svar · 349 visningar · startad av mikaeled

Medlem sedan dec. 2000157 inlägg
Frågan#1

Hej,

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).

Medlem sedan maj 20012 237 inlägg
#2

Skapa följande sql-tavla:

table user_message:

- user_id
- message_id
- have_read_message

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).

Medlem sedan mars 20034 471 inlägg
#3

jme skrev:

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
Medlem sedan maj 20012 237 inlägg
#4

aasah: givetvis, tack för det. Ska korrigera.

249 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)