![]() |
behöver lite hjälp med en SQL
Hej,
behöver lite hjälp med att utforma en SQL för ett meddelande-system: såhär ser min databasstruktur ut lite förenklat table.dbo.messages sender_id_fk, receiver_id_fk, date, message, seen table.dbo.users id, firstname, lastname, ... Det jag nu vill åstadkomma är att ta ut en lista med användare sorterad på "seen" (int) jag får problem eftersom [messages] kan innehålla flera radera till samma användare där vissa är "seen" och andra inte.. |
Typ (otestat):
SELECT DISTINCT(sender_id_fk) FROM messages WHERE seen = 1 GROUP BY sender_id_fk Sen får du göra en join mot users |
Citat:
SELECT DISTINCT(m.sender_id_fk) FROM message m RIGHT JOIN users u ON u.id=m.sender_id_fk WHERE m.seen = 1 GROUP BY m.sender_id_fk |
Citat:
|
Citat:
|
så långt har jag kommit
SELECT DISTINCT(m.sender_id_fk), u.firstname, u.lastname, m.seen FROM message m RIGHT JOIN users u ON u.id=m.sender_id_fk GROUP BY m.sender_id_fk ORDER BY m.seen, m.created Problemet med denna är ju att måste sortera själva GROUP BY på seen eftersom den råkar bara ta den senaste seen |
Borde du inte istället ha en kolumn i varje användares tabell där du sätter ID't av det meddelande den såg senast.
När man postar ett meddelande så uppdateras den kolumnen med det ID meddelandet får. När man kollar på meddelandena så uppdateras den med det högsta i den tråden. |
Citat:
|
Citat:
|
Citat:
denna lista vill jag sortera på användare som jag har minst en oläst meddelande ifrån. |
ORDER BY m.seen ASC, m.created DESC
[edit] Jaha, men du får kanske göra en MAX(m.seen) som du sorterar på, kanske?! [edit 2] Neä nu hade jag lite otur när jag tänkte.... men oh well... pass |
Citat:
Kod:
SELECT notifications. receiver_id, notifications.seen Ett litet tips; undvik att använda förkortningar i SQL-kod du vill ha hjälp med. Även om `m` och `u` gör koden mer kompakt så blir den svårläst för personer som inte skrivit koden. |
Citat:
|
Citat:
Det nerix skriver är sannolikt vad du söker. |
Citat:
|
Lägg upp den på http://sqlfiddle.com/
|
Alla tider är GMT +2. Klockan är nu 09:12. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson