Kom ihåg mig?
Home Menu

Menu


behöver lite hjälp med en SQL

 
Ämnesverktyg Visningsalternativ
Oläst 2016-09-08, 13:05 #1
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
Question 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..
naak2803 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-09-08, 13:38 #2
digiArt digiArt är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jan 2004
Inlägg: 1 429
digiArt digiArt är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jan 2004
Inlägg: 1 429
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
digiArt är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-09-08, 13:58 #3
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
Citat:
Ursprungligen postat av digiArt Visa inlägg
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
naak2803 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-09-08, 14:34 #4
gregoff gregoff är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2010
Inlägg: 658
gregoff gregoff är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2010
Inlägg: 658
Citat:
Ursprungligen postat av naak2803 Visa inlägg
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)
gregoff är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-09-08, 15:04 #5
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
Citat:
Ursprungligen postat av gregoff Visa inlägg
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 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-09-08, 15:16 #6
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
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
naak2803 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-09-08, 15:46 #7
fabians avatar
fabian fabian är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jul 2004
Inlägg: 2 162
fabian fabian är inte uppkopplad
Klarade millennium-buggen
fabians avatar
 
Reg.datum: Jul 2004
Inlägg: 2 162
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.
fabian är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-09-08, 15:51 #8
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
Citat:
Ursprungligen postat av fabian Visa inlägg
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.
naak2803 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-09-08, 16:00 #9
fabians avatar
fabian fabian är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jul 2004
Inlägg: 2 162
fabian fabian är inte uppkopplad
Klarade millennium-buggen
fabians avatar
 
Reg.datum: Jul 2004
Inlägg: 2 162
Citat:
Ursprungligen postat av naak2803 Visa inlägg
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.
fabian är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-09-08, 16:32 #10
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
Citat:
Ursprungligen postat av fabian Visa inlägg
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.
naak2803 är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 20:30.

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