WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   behöver lite hjälp med en SQL (https://www.wn.se/forum/showthread.php?t=1067272)

naak2803 2016-09-08 13:05

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

digiArt 2016-09-08 13:38

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

naak2803 2016-09-08 13:58

Citat:

Ursprungligen postat av digiArt (Inlägg 20519821)
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

nja, nu får jag bara ut en rad, vilket är förståeligt med tanke på att man skriver seen = 1 ... den ska ju bara sortera efter seen.

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

gregoff 2016-09-08 14:34

Citat:

Ursprungligen postat av naak2803 (Inlägg 20519823)
nja, nu får jag bara ut en rad, vilket är förståeligt med tanke på att man skriver seen = 1 ... den ska ju bara sortera efter seen.

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

Om du ska sortera efter något så får du lägga till ORDER BY seen ASC (alternativt DESC istället för ASC om du vill vända på sorteringen)

naak2803 2016-09-08 15:04

Citat:

Ursprungligen postat av gregoff (Inlägg 20519824)
Om du ska sortera efter något så får du lägga till ORDER BY seen ASC (alternativt DESC istället för ASC om du vill vända på sorteringen)

riktigt så enkelt är det ju inte.. eftersom det bara finns en rad med användare och en användare kan ha flera meddelande kopplade till sig som i sintur ska vara sorterade på seen.

naak2803 2016-09-08 15:16

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

fabian 2016-09-08 15:46

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.

naak2803 2016-09-08 15:51

Citat:

Ursprungligen postat av fabian (Inlägg 20519828)
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.

njea, jag vill ju ha en lista med användare sorterad på olästa meddelande.

fabian 2016-09-08 16:00

Citat:

Ursprungligen postat av naak2803 (Inlägg 20519829)
njea, jag vill ju ha en lista med användare sorterad på olästa meddelande.

Hur skall du använda det? Det kanske hjälper att förstå vad du vill åstadkomma.

naak2803 2016-09-08 16:32

Citat:

Ursprungligen postat av fabian (Inlägg 20519830)
Hur skall du använda det? Det kanske hjälper att förstå vad du vill åstadkomma.

användarna ska kunna skicka meddelande till varandra, längst ut till vänster är det tänk att visa en lista på användarna...

denna lista vill jag sortera på användare som jag har minst en oläst meddelande ifrån.


Alla tider är GMT +2. Klockan är nu 04:54.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson