AW3423DW QD-OLED - Ryzen 5800x - MSI Gaming Trio X 3090 - 64GB 3600@cl16 - Samsung 980 Pro 2TB/WD Black SN850 2TB
PM-system ( PHP / Ajax / MySQL )
Hallå där du som orkar läsa!
Jag håller på att bygga det nya Facebook!
Skämt åsido...
Har byggt ett litet community med en väldigt simpel och bristfällig PM-funktion där man kan skicka PM till en annan user genom att gå in på dennes profil och skicka via formuläret där.
Det jobbiga är ju att när man går in i sin inkorg och läser meddelandet så kan man liksom inte svara där direkt, utan man får gå till medlemmens profil igen och fylla i formuläret.
Lagom användarvänligt med andra ord =D
Så jag har funderat (och sökt runt lite på nätet) på hur jag skapar en konversation, så att man kan ha allt samlat helt enkelt.
Har provat att hämta datan med Ajax/jQuery och det blir ju real-time och man slipper refresha osv men jag kan fan inte komma på hur jag ska "starta" en konversation mellan två specifika users och ha alla meddelanden samlade efter varandra, som en chatt i Messenger alltså.
Detta är säkert jättesimpelt att fixa för den som är lite mer erfaren i SQL/Programmering överlag men jag får inte till logiken i skallen än.
Som det är nu så är inte user-tabellen relaterad till message-tabellen i alla fall.
Tidsstämpel och relationer låter som något användbart i det här fallet. Typ spara ett user_id på meddelanden men även tidsstämpel så du kan sortera arrayen efter tid.
Du skulle kunna ha message-tabellen på följande vis:
id, parent_id, from_user_id, to_user_id, message, timestamp
Sätt parent_id till 0 om det är en ny konversation. Om det istället är ett svar på ett tidigare meddelande så sätter du parent_id till meddelandets ID. from_user_id och to_user_id är ganska självbeskrivande (går säkert att hitta bättre namn på dom), och de kan skifta mellan meddelandena i konversationen. parent_id kanske kan döpas till reply_to_id om det är lättare att förstå vad den hänvisar till.
Om du vill kunna skala dina meddelanden så gör följande:
"messages" table: standard grejer, id/message/user_id/timestamp
"conversations" table: id/timestamp
"conversation_user" table, id/conversation_id/user_id/timestamp
Vill du skala det till att fungera som t.ex. slack lägger du till en ny tabell kallad t.ex. threads som tillhör conversations. Svarar en användare på ett specifikt meddelande i konversationen så skapas en tråd som tillhör konversationen, och alla meddelanden som svarar på det meddelandet hamnar i tråden istället. På det sättet får du mer en
- Meddelande 1
- Meddelande 2
- Meddelande 3, svar till meddelande 2
- Meddelande 4, svar till tråden
- Meddelande 5 (svarade inte på tråden) etc
Göra på det här sättet gör det också enkelt att stöda ett oändligt antal användare i samma konversation (kan vara bra att kunna t.ex. bjuda in folk till en konversation osv)
Se bara till att sortera enligt timestamps så kommer datan när du ritar ut den fungera perfekt. Upp till dig på vilket sätt du vill stöda trådar (om du ens vill det), finns många sätt att göra det på.
- Idag Airtec Pro Type1 – batteridrivet alternativ till tryckluft på burk 20
- Idag Nu stiger hårddiskpriserna med uppemot 10 procent 10
- Idag Analytiker: Apple har överskattat intresset för Vision Pro 49
- Igår AMD, Nvidia och Intel – vad är det för skillnad mellan grafikkortstillverkarna? 25
- Igår Testpilot: MSI MPG 271QRX - Färgsprakande OLED i 360 Hz 13
- Dator startar inte efter chassibyte3
- Ny TV har skada i panel, butik menar att de inte kan återskapa felet24
- Airtec Pro Type1 – batteridrivet alternativ till tryckluft på burk22
- Posta din hastighet!2441
- Quiz: Vad kan du om Inet?60
- Akkogear 5087B 9009 Retro Akko CS Wine Red0
- Bilder på ditt senaste inköp (2024) [inga produktbilder]539
- Microsoft rullar ut Startmenyreklam till alla56
- Simulator - hjälp/tips på bildförskjutning sökes15
- Ubuntu 24.04 LTS16
- Säljes Säljer stationära datorn!
- Säljes Kinnarps 8000 x2, iPhone SE 2020 256GB, SteelSeries Apex 7 Red TKL, Raspberry Pi 3B+ mm
- Säljes Gigabyte Aorus GTX 1060 6GB
- Säljes Diverse - MX Keys Tangentbord, ZenDAC V2, Fidelio Hörlurar, Handkontroll
- Säljes Logitech G915 Lightspeed trådlöst tangentbord GL Tactile & Logitech G Pro Wireless
- Bytes Testkörd Tp-Link Omada 605ER
- Säljes Higround BLACKICE Keycaps 65% Nordic
- Köpes Qnap TL-D800S / TL-D1600S / TL-D800C
- Säljes 2 set med Corsair 16GB (2x8GB) DDR4 3600MHz CL18 Vengeance LPX AMD
- Köpes 5800x3d / 5700x3d
- Airtec Pro Type1 – batteridrivet alternativ till tryckluft på burk22
- Nintendo-innehåll tas bort från Garrys Mod12
- Nu stiger hårddiskpriserna med uppemot 10 procent10
- Quiz: Vad kan du om Inet?60
- Analytiker: Apple har överskattat intresset för Vision Pro49
- Microsoft rullar ut Startmenyreklam till alla56
- EU röstar igenom ”rätten att reparera”52
- Viaplay sätter ner foten mot delade konton55
- AMD, Nvidia och Intel – vad är det för skillnad mellan grafikkortstillverkarna?25
- Systembolaget varnar: Dryckesbrist efter hackerattack105