Bonjour à toute la communauté,
J'ai un souci de jointure assez complexe. Je vais essayer d'être précis.
J'ai 4 tables dont la table users,stats_affichages,stats_clicks et bannieres
les tables en gros :
users : id,nomsite,..
stats_affichages: id,users_id,bannieres_id,nb_affich,date_time,ip
stats_clicks: id, user_id, nb_click,date_time,ip
bannieres:id,nom_banniere
la table users est lié aux 2 tables stats
(users.id -> stats_affichages.users_id , users.id -> stats_clicks.users_id )
et la table bannieres est liés egalement aux 2 tables stats de la mm facon.
Sachant que je souhaite afficher les résultats de la maniere suivante:
nomsite(users) | id(user) | total click | total affich
-----------------------------------------------------------
----------------nom_banniere | 1000 | NULL
----------------nom_banniere | 200 | 400
----------------nom_banniere | 50 | 80
nomsite2(users) | id2(user) | total click | total affich
-----------------------------------------------------------
----------------nom_banniere | nb_click | nb_affich
----------------nom_banniere | nb_click | nb_affich
----------------nom_banniere | nb_click | nb_affich
il est possible que des nb_clicks ou des nb_affich n'existent pas pour une banniere donnée.
J'ai donc deduis qu il fallait 2 requetes, une pour l'entete et l'autre pour le sous tableau dans 2 boucles imbriqués en php puisque c'est le langage que j'utilise .=)
J'ai essayer plusieurs fois, jamais le bon resultat.
voila ou j'en suis pour l entete:
select SUM(DISTINCT nb_click) as totalclick, SUM(DISTINCT nb_affich) as totalaffich , nom_site,us.id as userid
FROM users as us
LEFT OUTER JOIN stats_clicks as stc
ON us.id=stc.users_id
LEFT OUTER JOIN stats_affichages as sta
ON us.id=sta.users_id
GROUP BY nom_site
ORDER BY totalclick DESC
et pour le sous tableau :
SELECT stc.nb_click as click,sta.nb_affich as affich, ban.nom as nom
FROM banniere as ban
LEFT OUTER JOIN stats_clicks as stc
ON ban.id=stc.bannieres_id
LEFT OUTER JOIN stats_affichages as sta
ON ban.id=sta.bannieres_id
WHERE us.id = '".$r['userid']."
Merci d'avance.
Partager