limitation

Eléphant du PHP | 114 Messages

20 avr. 2005, 18:13

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

Eléphanteau du PHP | 40 Messages

20 avr. 2005, 18:30

Il faut stocker les messages en face des destinataires.
--------
P.S.:
J'utilise PHP 4
Pour les tests j'utilise easy-php
Mon hebergeur est free.fr
--------
Nat0psi

Eléphant du PHP | 114 Messages

20 avr. 2005, 18:41

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.

AntiZeus
Invité n'ayant pas de compte PHPfrance

22 avr. 2005, 16:10

A mon avis, si tu renseigne un peu sur la fonction PHP getDate() tu devrais arriver à faire ce que tu veux !!!

Eléphant du PHP | 114 Messages

22 avr. 2005, 18:37

Ok merci, je vais essayer de trouver

Mammouth du PHP | 19672 Messages

22 avr. 2005, 18:48

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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 114 Messages

22 avr. 2005, 19:03

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.

Mammouth du PHP | 19672 Messages

22 avr. 2005, 19:13

Parce que ta requête, sauf erreur de mes sens abusés, doit comporter un GROUP BY sur le destinataire.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: