2010-03-12 7 views
0

J'ai un problème avec (pour moi compliqué) Requête MySql.Problème de requête Mysql

Ok, voici ce que je dois faire:

Je dois d'abord vérifier les messages d'utilisateur spécifique reçu

$mid=$_SESSION['user']; 
$stat1=mysql_query("SELECT id, fromid, toid, subject FROM messages WHERE 
toid = '".$mid."' AND subject != 'not readed' GROUP BY fromid ") 
or die(mysql_error()); 
while ($h = mysql_fetch_array($stat1)) 
{ 
$whosend=$h['fromid']; 

La deuxième chose que je dois faire est de vérifier l'état des utilisateurs (supprimé ou non) qui a envoyé les messages ("fromid") à mon utilisateur spécifique ("toid"). Cela je dois faire à partir d'un autre tableau:

$stat2=mysql_query("SELECT id, status FROM members WHERE id='".$whosend."' AND 
status ='1'")or die(mysql_error()); 
while ($s = mysql_fetch_array($stat)) 
{ 

Puis mes problèmes commencent à apparaître.

Comment puis-je obtenir le nombre d'utilisateurs qui ont envoyé des messages à mon utilisateur spécifique avec status = 1? Pas le nombre de messages mais le nombre total d'utilisateurs qui les ont envoyés.

Existe-t-il un moyen plus simple de faire cette requête? J'ai essayé avec JOIN des tables comme

$stat=mysql_query("SELECT memebers.id, memebers.status, messages.toid, 
messages.fromid,messages.subject,messages.id FROM members, messages 
WHERE messages.toid='".$mid."' AND members.status ='7' .... 

Mais même dans cette requête que je dois avoir id de l'utilisateur qui a envoyé des messages avant cette requête il y aura une autre requête avant cette jointure des tables.

+0

Merci de poster votre structure de base de données, cela aidera – Josh

Répondre

2

Vous êtes donc à la recherche du nombre de membres ayant status = 1 qui ont envoyé un message à cet autre membre ($ mid)?

Quelque chose comme ça?

$sql = "select count(distinct messages.fromid) From messages Inner Join members on members.id = messages.fromid Where messages.toid = '" . $mid . "' AND members.`status` = 1"; 
+0

Merci Aeron! J'ai une autre question. Comment puis-je faire une liste du dernier message reçu pour chacun de ces utilisateurs qui ont envoyé des messages? – Sergio

0
SELECT id, fromid, toid, subject FROM messages WHERE toid = '".$mid."' AND subject != 'not readed' GROUP BY fromid 

ne peut être juste que vous avez GROUP BY formid et aucune agrégation dans la clause select.