Page 1 sur 1

limitation

Posté : 20 avr. 2005, 18:13
par Florent
Bonjour
Je commence à me débrouiller, mais logique, je tombe sur un petit problème :)

J'ai réaliser une messagerie interne à mon mon site pour que les membres puisse s'envoyer des messages.
Tout fonctionne à merveille.
Cependant j'aimerais limiter le nombres de messages stockés dans la base à par exemple 10 par membres.
Il s'agit d'une base unique pour tous, ou le choix des messages à lire pour un membre est fait sur son pseudo.
je ne vois pas comment faire.
Voici la structure :

CREATE TABLE messages (
idmessage tinyint(4) NOT NULL auto_increment,
date date NOT NULL default '0000-00-00',
heure time NOT NULL default '00:00:00',
sujet varchar(40) NOT NULL default '',
texte varchar(255) NOT NULL default '',
expediteur tinyint(4) NOT NULL default '',
destinataire tinyint(4) NOT NULL default '',
PRIMARY KEY (idmess)
) TYPE=MyISAM;
Un membre identifié peu lire les messages si 'destinataire'=pseudo
Et j'aimerais limiter le nombre de message.....
Merci d'avance

Posté : 20 avr. 2005, 18:30
par Natopsi
Il faut stocker les messages en face des destinataires.

Posté : 20 avr. 2005, 18:41
par Florent
Je ne comprend pas vraiment ce que tu veux dire ?

N'y aurait-il pas moyen qu'a chaque fois qu'un membre ouvre la base,(en consultant ses messages par exemple), de faire un test sur la date :
Tous les messages de plus de 10 jours seraient supprimés ?
En fait je ne sais pas gérer les dates, surtout dans un cas comme celui-ci.

Posté : 22 avr. 2005, 16:10
par AntiZeus
A mon avis, si tu renseigne un peu sur la fonction PHP getDate() tu devrais arriver à faire ce que tu veux !!!

Posté : 22 avr. 2005, 18:37
par Florent
Ok merci, je vais essayer de trouver

Posté : 22 avr. 2005, 18:48
par Cyrano
Salut,
je dirais qu'en l'occurence, travailler avec les dates ne servira qu'à compliquer l'application.

Le problème posé est simple : maximum, 10 messages par membre : bien considérons qu'il s'agit de messages reçus donc, on va se servir du champ destinataire pour identifier les "boites aux lettres". Là dessus, on peut faire un comptage de messages par membre en les classant par id_message: comme ce champ est en auto_increment, il est facile d'éliminer les plus anciens au-delà de dix.....
enfin schématiquement, je le vois comme ça, quelqu'un aura peut-être une idée meilleur ?

Posté : 22 avr. 2005, 19:03
par Florent
C'est ce que je pensais faire, mais je n'y suis pas arrivé.
mon principe :
un membre se connecte :
$sql2 = "SELECT idmess,date,sujet,expediteur FROM messages WHERE destinataire='$login'";
$reponse3 = mysql_query($sql2) or die("Erreur SQL ! <BR />".$sql2."<BR />".mysql_error());

Donc là, avec ces infos, plus bas, tous les messages dont ce membre est le destinataire vont être listés avec un while.

Si j'ai bien compris :
Il me faut compter tous les messages adressés à ce membre, et si ce nombre dépasse la limite, je dois supprimer tous les messages dont les idmessages sont les plus petits (plus anciens donc)

Ben en fait c'est avec ça que je me suis embrouillé et que je n'arrive pas à faire.

Posté : 22 avr. 2005, 19:13
par Cyrano
Parce que ta requête, sauf erreur de mes sens abusés, doit comporter un GROUP BY sur le destinataire.