par
xTG » 18 sept. 2011, 19:10
Bon déjà la structure de tes tables laissent franchement à désirer. ^^'
Il faudrait une clé unique pour chaque n-uplet, pour une table membre on met généralement un identifiant numérique en auto-incrément.
Les clés permettront de rendre les jointures de tes requêtes plus rapides et permettront au moteur du sgbd de trouver plus facilement les données.
De plus actuellement, si une personne souhaite changer de pseudo ? Avec ton schéma c'est tout bonnement non envisageable.
Et pour la suppression d'un unique message du chat ? Aussi impossible.
Pour ton problème cela vient du fait que tu ne fais aucune relation de jointure entre membre et chat. Il sélectionne donc n'importe quel membre pour n'importe quel message du chat. Il n'y a pas de lien entre destinataire et et pseudo.
Voilà ce que je te conseille :
MEMBRE
idMembre - pseudo - age - connecte
Avec idMembre comme clé primaire de type int en auto-increment.
CHAT
idMessage - idExpediteur - message - idDestinataire - status
Avec idMessage comme clé primaire de type int en auto-increment.
Et idExpediteur, idDestinataire faisant référence à l'idMembre de la table Membre.
Exemple d'utilisation :
Ainsi le nombre de message posté par membre connecté devient =>
SELECT count(chat.idMessage) as nbremessage, membre.connecte, membre.pseudo
FROM membre
LEFT JOIN chat ON (membre.idMembre = chat.idExpediteur)
WHERE membre.connecte = 1
GROUP BY chat.idMembre
ORDER BY membre.pseudo ASC
Bon déjà la structure de tes tables laissent franchement à désirer. ^^'
Il faudrait une clé unique pour chaque n-uplet, pour une table membre on met généralement un identifiant numérique en auto-incrément.
Les clés permettront de rendre les jointures de tes requêtes plus rapides et permettront au moteur du sgbd de trouver plus facilement les données.
De plus actuellement, si une personne souhaite changer de pseudo ? Avec ton schéma c'est tout bonnement non envisageable.
Et pour la suppression d'un unique message du chat ? Aussi impossible.
Pour ton problème cela vient du fait que tu ne fais aucune relation de jointure entre membre et chat. Il sélectionne donc n'importe quel membre pour n'importe quel message du chat. Il n'y a pas de lien entre destinataire et et pseudo. ;)
Voilà ce que je te conseille :
MEMBRE
idMembre - pseudo - age - connecte
Avec idMembre comme clé primaire de type int en auto-increment.
CHAT
idMessage - idExpediteur - message - idDestinataire - status
Avec idMessage comme clé primaire de type int en auto-increment.
Et idExpediteur, idDestinataire faisant référence à l'idMembre de la table Membre.
Exemple d'utilisation :
Ainsi le nombre de message posté par membre connecté devient =>
[sql]SELECT count(chat.idMessage) as nbremessage, membre.connecte, membre.pseudo
FROM membre
LEFT JOIN chat ON (membre.idMembre = chat.idExpediteur)
WHERE membre.connecte = 1
GROUP BY chat.idMembre
ORDER BY membre.pseudo ASC[/sql]