WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   SQL gruppera icke (https://www.wn.se/forum/showthread.php?t=1039374)

Pettolajnen 2009-11-30 22:50

SQL gruppera icke
 
Jag bygger en mail/pm-funktion. När man som användare klickar på "Mail" i menyn så ska man då komma till en översikt över ens mailkonversationer. Jag vill alltså inte att det bara ska ligga ens senaste mail efter datumordning. Utan jag vill att ens olika konversationer ska visas där sorterade efter senast mottagna inlägg inom en konversation. En konversation är alltså ungefär som en kanal i en chatt.

Här är ett exempel på hur en mail-index kan se ut:

Richard, 22 år | Visa konversation | 5 inägg | senast mottaget: idag
Jenny, 27 år | Visa konversation | 2 inlägg | senast mottaget: igår
Sara, 20 år | Visa konversation | 43 inlägg | senast mottaget: igår


Jag sparar alla inlägg/mail i en tabell som heter "mail" med följande kolumner:

mail_id
parent_id
from_user_id
to_user_id
content
sent_datetime
read_datetime
read

Hur ska jag hämta ut så det blir listat enligt mitt ovanstående exempel? Hur ska queryn se ut? Tycker den är rätt svår asså. Suttit och funderat men komme rinte fram till nått, därför jag frågar här.

allstars 2009-12-01 08:00

Citat:

Ursprungligen postat av Pettolajnen (Inlägg 20333486)
Jag bygger en mail/pm-funktion. När man som användare klickar på "Mail" i menyn så ska man då komma till en översikt över ens mailkonversationer. Jag vill alltså inte att det bara ska ligga ens senaste mail efter datumordning. Utan jag vill att ens olika konversationer ska visas där sorterade efter senast mottagna inlägg inom en konversation. En konversation är alltså ungefär som en kanal i en chatt.

Här är ett exempel på hur en mail-index kan se ut:

Richard, 22 år | Visa konversation | 5 inägg | senast mottaget: idag
Jenny, 27 år | Visa konversation | 2 inlägg | senast mottaget: igår
Sara, 20 år | Visa konversation | 43 inlägg | senast mottaget: igår


Jag sparar alla inlägg/mail i en tabell som heter "mail" med följande kolumner:

mail_id
parent_id
from_user_id
to_user_id
content
sent_datetime
read_datetime
read

Hur ska jag hämta ut så det blir listat enligt mitt ovanstående exempel? Hur ska queryn se ut? Tycker den är rätt svår asså. Suttit och funderat men komme rinte fram till nått, därför jag frågar här.

Du måste gruppera, på from_user_id, sedan tar du ut MAX(sent_datetime) och sorterar enligt detta samt omvandlar till "igår" osv

Bjorne 2009-12-01 14:06

Kod:

SELECT id_sum - 3, n_messages, last_time
FROM
    (SELECT
        (from_user_id + to_user_id) AS id_sum,
        COUNT(1) AS n_messages,
        MAX(sent_datetime) AS last_time
    FROM mail
    WHERE from_user_id = 3 OR to_user_id = 3 GROUP BY id_sum) AS convos;

Där 3 ID på personen vars konversationer du letar efter. Problemet med allstars approach är att om man bara grupperar på from_user_id så räknas bara de meddelanden som skickats från den personen och inte de meddelanden som man skickat till den personen.


Alla tider är GMT +2. Klockan är nu 00:51.

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