Jump to content
php.lv forumi

Sarakste no DB


hjkl

Recommended Posts

Datubāzē glabājas ziņas, ko lietotāji sūta viens otram. Šeit: http://sqlfiddle.com/#!2/fad98d/1

 

Mērķis - sagrupēt visas ziņas pa sarakstēm un katrai sarakstei atgriezt vienu tabulas rindu. 

Piemēram, datubāzē pirmās 4 rindas ir sarakste starp lietotāju x un y.

Līdz ar to pēc šāda query izpildes rezultātos būs 2 rindas - viena par saraksti starp x un y, otra par m un n.

 

Katrā rindā jābūt informācijai par attiecīgo saraksti:

abi dalībnieki(secība nav svarīga), pēdējā ziņa šajā sarakstē un nosūtīšanas laiks.

Līdz ar to:

1. rinda - x, y, April, 22 2014 17:00:00+0000, message4

2. rinda - m, n, April, 22 2014 20:00:00+0000, message7

 

Izmantojam mysql.

 

Kā to izpildīt?

Edited by hjkl
Link to comment
Share on other sites

Es jebkurā gadījumā taisītu arī sarakšu tabulu.

Bet šijā gadījumā ļoti vienkārši būtu, ja izveidotu vēl vienu lauku (conversation_id), kurā glabā kombināciju no sūtītāja un saņēmēja tā, ka jaunākais no tiem ir pirmais, piem: a:b, a:c, b:c, x:y, m:n

Un tad vienkārši taisa GROUP_BY conversation_id.

 

idejiski: http://sqlfiddle.com/#!2/89e21/2

Edited by codez
Link to comment
Share on other sites

Es jebkurā gadījumā taisītu arī sarakšu tabulu.

Bet šijā gadījumā ļoti vienkārši būtu, ja izveidotu vēl vienu lauku (conversation_id), kurā glabā kombināciju no sūtītāja un saņēmēja tā, ka jaunākais no tiem ir pirmais, piem: a:b, a:c, b:c, x:y, m:n

Un tad vienkārši taisa GROUP_BY conversation_id.

 

Ko tu domāji ar sarakšu tabulu?

Protams, ka tajā piemērā sender, reciever bija domāts sender_id, reciever_id, nevis uzreiz viņu vārdi.

Link to comment
Share on other sites

Jo ir jau unikāls key, pēc kura saraksti atlasīt: abu lietotāju id pāris.

 

Vai tad tas arī nav tas, ko es uzrakstīju atbildē?

 

 

Ko tu domāji ar sarakšu tabulu?

 

Sarakšu tabula ir tabula, kura raksturo saraksti starp lietotāju x un y. Piemēram pēdējās ziņas laiks, neizlasīto ziņu daudzums, utml. Tādā veidā, kad lietotājs ieiet savā message sadaļā, ir vajadzīgs tikai viens vienkāršs kverijs, lai atlasitu informāciju par sarakstēm ar citiem lietotājiem.

Conversation tabulu var veidot ar dubulto ierakstu metodi, kad vienu saraksti raksturo 2 ieraksti. Viens raksturo x saraksti ar y, otrs y ar x.

Tad ir teiksim lauki, userid1, userid2, last_message_time, unread_messages, utml.

Un, ja gribi atlasīt visas x lietotāj sarakstes, tad

SELECT * FROM conversations WHERE userid1 = x
Kad lietotājs x saņem ziņu, palielini unread_messages skaitu.

Ja grib attēlot kopēja sarakšu lapā ari pēdēji ziņu, var izveidot lauku last_message_id un piejoinot.

SELECT * FROM conversations c LEFT JOIN messages m ON c.last_meesage_id=m.id WHERE c.userd1=x
Link to comment
Share on other sites

Vai tad tas arī nav tas, ko es uzrakstīju atbildē?

 

Ne gluži:

  

ļoti vienkārši būtu, ja izveidotu vēl vienu lauku (conversation_id), kurā glabā kombināciju no sūtītāja un saņēmēja

 

 

Bet nu pārējais būtībā ir pareizākais un ērtākais variants:

 

Sarakšu tabula ir tabula, kura raksturo saraksti starp lietotāju x un y. Piemēram pēdējās ziņas laiks, neizlasīto ziņu daudzums, utml. Tādā veidā, kad lietotājs ieiet savā message sadaļā, ir vajadzīgs tikai viens vienkāršs kverijs, lai atlasitu informāciju par sarakstēm ar citiem lietotājiem.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...