[PHP/mysql]prive berichten met meerdere mappen

Pagina: 1
Acties:
  • 113 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hallo ik kom er even niet uit. Ik wil een pm systeem met meerdere mappen:

inbox, outbox, saved en trash. Hieronder staat mijn db structuur
SQL:
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE `mginbox` (
  `id` int(10) NOT NULL auto_increment,
  `sender` int(10) NOT NULL,
  `receiver` int(10) NOT NULL,
  `subject` varchar(50) NOT NULL,
  `text` mediumtext NOT NULL,
  `date` datetime NOT NULL,
  `msgread` int(1) NOT NULL default '0',
  `box` tinyint(1) NOT NULL,
  PRIMARY KEY  (`id`),
) ENGINE=MyISAM 


Ik dacht slim te zijn door in de 'box' een integer te zetten welke type box het is..

Uiteraard werkt dit wel met inbox en outbox...alleen saved en trashed wil niet werken. In trash kunnen natuurlijk berichten uit de inbox en uit de outbox staan.

de trash query zou zoiets worden:

<?
$box_query .=" sender ='".$Lid['userid']."' OR receiver = '".$Lid['userid']."' AND type = 'trash' ";
?>

maar ja dan zal de ander ook berichten in zijn trash hebben terwijl hij niks in de trah heeft gegooid!

Ik vraag me echt af hoe dit te doen? Moet ik meerdere berichten toevoegen (dubbel dus) of zijn er andere tips?

[ Voor 0% gewijzigd door een moderator op 22-07-2007 13:13 . Reden: code tags erbij gezet :) ]


Acties:
  • 0 Henk 'm!

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Goeiemorgen :) Eerst even iets organisatorisch: Zou je de volgende keer in je topic-titel kunnen aangeven om welke talen het gaat? Ik kan nu uit je code-voorbeelden afleiden dat het hoogstwaarschijnlijk om MySql i.c.m. PHP gaat, maar dat zal misschien niet voor iedereen duidelijk zijn. E.e.a. staat hier uitgelegd.

On-topic: je zegt dat "In trash kunnen natuurlijk berichten uit de inbox en uit de outbox staan". Wil je het bericht dan kopieren van de inbox naar de trash, of wil je berichten kunnen verplaatsen van de inbox naar de trash? In het laatste geval kan een bericht maar in 1 map tegelijk staan, en zou je een bericht naar de trash kunnen verplaatsen door de box-waarde te updaten naar die van 'trash'

Als je een bericht wel in meerdere mappen wilt kunnen opslaan, dan gaat je dit met deze tabelstructuur niet lukken. Je zult dan een koppeltabel moeten maken die de n:m-relatie voorstelt tussen berichten en mappen.

Je tabel 'mginbox' zou dan iets van 'message' moeten gaan heten, en het 'box'-veld komt dan te vervallen. Er vanuitgaande dat je al een tabel 'box' hebt die de soorten mappen bevat, dan zou je een nieuwe tabel 'message_box' moeten maken die per rij de foreign keys msg_id en box_id bevat. Deze tabel vormt dan de koppeling om een message aan een box toe te wijzen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ok zal ik voortaan doen en het is idd php & mysql

nee ik wil gewoon de berichten verplaatsen...

alleeen het simpel updaten van de box naar trash gaat niet lukken natuurlijk, omdat als je met 1 bercicht werkt je ook beinvloed wat de andere ziet...

zie mijn laatste regels uit mijn begin post :)

Acties:
  • 0 Henk 'm!

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Verwijderd schreef op zondag 22 juli 2007 @ 11:33:
ok zal ik voortaan doen en het is idd php & mysql

nee ik wil gewoon de berichten verplaatsen...

alleeen het simpel updaten van de box naar trash gaat niet lukken natuurlijk, omdat als je met 1 bercicht werkt je ook beinvloed wat de andere ziet...

zie mijn laatste regels uit mijn begin post :)
Oh, ok, op die manier. Ik snap 'm.

Het probleem is dus eigenlijk dat je per bericht opslaat in welke map deze staat, terwijl dit voor de verzender anders zal zijn dan voor de ontvanger. Een mogelijke (lelijke) oplossing zou kunnen zijn om het 'box'-veld te vervangen door 'sender_box' en 'receiver_box', zodat je voor beiden een andere map kunt specificeren.

Echter, voor 'msgread' geldt hetzelfde, en daarom zou het denk ik beter zijn om onderscheid te maken tussen eigenschappen van het bericht op zich (sender, receiver, subject..) en de eigenschappen die betrekking hebben op de status (wel/niet gelezen) en de lokatie (inbox, trash, ..) van het bericht. Deze laatste eigenschappen krijgen dan hun eigen tabel, met foreign keys naar de persoon waar het om gaat en het id van de message waar het om gaat

Voor elk bericht zal er dan 1 message-rij worden aangemaakt, en 2 rijen voor de status (een voor de verzender en 1 voor de ontvanger, maar meerdere ontvangers zou ook kunnen). Voordeel is dat de verzender nu een bericht uit z'n trash kan verwijderen zonder dat de ontvanger daar last van heeft.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
kijk dit is de tabel structuur van joomla:

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE `#__jms` (
 `id` int(11) NOT NULL,
 `toid` int(11) NOT NULL,
 `toids` text default NULL,
 `fromid`  int(11) NOT NULL,
 `subject` text NOT NULL,
 `message` text NOT NULL,
 `datetime` datetime NOT NULL default '0000-00-00 00:00:00',
 `inbox` varchar(2) default '1',
 `outbox` varchar(2) default '1',
 `stateto` tinyint(1) default '0',
 `statefrom` tinyint(1) default '0',
 `priority` tinyint(1) default '1',
 `system` tinyint(1) default '0',
 `disablereply` tinyint(1) default '0',
 `attachments` text default NULL,
 PRIMARY KEY  (`id`)
 ) TYPE=MyISAM


ik heb hun code een beetje bekeken, maar zij doen iets met die inbox en outbox: ze gebruiken daarin waarden van -2 t/m 2...alles dus in een tabel..(ik snap niet zo goed wat ze doen, maar zij hebben een in en outbox, archief en prullenbak)

voor msgread geldt dat niet denk ik, aangezien deze allen geldt voor de receiver..toch? :)

[ Voor 4% gewijzigd door moto-moi op 22-07-2007 13:13 . Reden: code-tags erbij gezet ]


Acties:
  • 0 Henk 'm!

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Verwijderd schreef op zondag 22 juli 2007 @ 12:10:
voor msgread geldt dat niet denk ik, aangezien deze allen geldt voor de receiver..toch? :)
In Outlook is het ook mogelijk om een bericht dat je zelf verzonden hebt te markeren als ongelezen.

Ik heb verder geen ervaring met Joomla, maar intuitief zou ik toch onderscheid maken tussen het bericht an sich, en aan wie dat bericht is gekoppeld (m.a.w. wie dat bericht kan zien, in welke map het staat en of het al gelezen is). Deze opzet is beter genormaliseerd, en biedt je de mogelijkheid om 1 bericht naar meerdere ontvangers te sturen, en lost ook meteen het probleem op van wanneer een verzender of ontvanger besluit het bericht 'hard' te deleten (dus dat deze ook niet meer in de trash te zien is). Dit is dan een kwestie van de koppeling tussen het bericht en die gebruiker weghalen. Het bericht zelf blijft dan nog wel bestaan voor de ander.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hmm..hoe zou je de db structuur dan hebben ? 8)7

Acties:
  • 0 Henk 'm!

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Verwijderd schreef op zondag 22 juli 2007 @ 12:31:
hmm..hoe zou je de db structuur dan hebben ? 8)7
table Message
msg_id (PK)
msg_sender
msg_receiver
msg_subject
msg_text
msg_date

table Folder
fld_id (PK)
fld_name

table User
usr_id (PK)
usr_name

table Message_User
mus_id (PK)
mus_message (FK naar msg_id)
mus_user (FK naar usr_id)
mus_folder (FK naar fld_id)
mus_isread

unique constraint op (mus_message, mus_user), zodat een bericht max. 1 keer aan een gebruiker gekoppeld kan worden.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
thanks ik er eens rustig naar kijken _/-\o_
Pagina: 1