Probleme avec SELECT COUNT & requête avec UNION

Fermé
MissOleana Messages postés 4 Date d'inscription mercredi 27 novembre 2013 Statut Membre Dernière intervention 29 novembre 2013 - 27 nov. 2013 à 23:10
 Utilisateur anonyme - 28 nov. 2013 à 11:20
Bonjour, je désire faire un SELECT COUNT sur une requête avec UNION

SELECT Expediteur, time, id FROM amis WHERE Destinataire= '$utilisateur' UNION SELECT Destinataire, time, id FROM amis WHERE Expediteur= '$utilisateur' order by time limit


J'ai essayé cela mais cela ne me remonte pas le résultat auditionné des deux count .

SELECT Expediteur, time, id, COUNT(*) FROM amis WHERE Destinataire= '$utilisateur' UNION SELECT Destinataire, time, id, COUNT(*) FROM amis WHERE Expediteur= '$utilisateur' order by time limit

help, je bug !

1 réponse

Utilisateur anonyme
28 nov. 2013 à 11:20
salut,


SELECT Expediteur, time, id, COUNT(*) as tot
FROM amis
WHERE Destinataire= '$utilisateur'
UNION
SELECT Destinataire, time, id, COUNT(*)
FROM amis
WHERE Expediteur= '$utilisateur'

order by time limit

Je ne sais plus si c'est obligatoire, mais il vaut mieux rajouter un alias sur le count de la première partie (inutile ensuite).

ensuite, que veux tu faire? Si l'idée est de récupérer la somme des message envoyé et recus d'une personne, l'union n'est pas, de mon point de vue, le plus adapté : j'utiliserai un join :


select a1.user,a1.time ,a1.id, (a1.tot + a2.tot) as total
from (select Expediteur as user, time, id, COUNT(*) as tot
from amis a1
where a1.Destinataire= '$utilisateur')as subAmis1
join (select Destinataire as user, time, id, COUNT(*) as tot
from amis a2
where a2.Expediteur= '$utilisateur')as subAmis2 on a1.user = a2.user and a1.time = a2.time and a1.id=a2.id;

Mais ca ne fonctionnera pas dans le sens où :
- tu ne regroupe pas tes résultats avec un group by
- si time représente une heure, on ne devrait pas retrouver de combinaison "user+id+time" identique.

Il faudrai un peu plus d'explication sur le rôle de la requête (que résultats voudrais-tu? à partir de quoi?) pour t'aider plus précisément.

naga
0