Bonjour,
Je fais appel à vous car j'ai une requête que je n'arrive pas à terminer d'écrire ! Une aide me permettra de mettre enfin en ligne mon projet.
J'ai une table newsfeed qui constitue le fil d'actualité de mon site : l'activité de chaque membre "user_ID" et de chaque page "page_ID" y est consigné. "action_type" désigne la nature de l'action et tout les champs non concernés par cette action sont mis à NULL. L'action "pg_subscription" désigne l'abonnement d'un membre à une page "pg_ID", "pg_link" une age qui est liée à une autre, etc.
EX: friendship désigne une liaison d'amitié avec un autre membre donc seul "friend_ID" sera remplie et les champs restant seront à NULL.
http://oi45.tinypic.com/2lu86z6.jpg
La table friends_linked sert à afficher un fil d'actualité qui concerne uniquement les amis de l'utilisateur :
http://i48.tinypic.com/2zfsch0_th.jpg
La table members_pages sert à afficher un fil d'actualité qui concerne uniquement les pages auxquelles l'utilisateur est abonné :
http://oi48.tinypic.com/16m5ahs.jpg
Le but est d'afficher à un membre l'actualité de ses amis et des pages auxquelles il est abonné via une seule requête (la table membres contient les infos membres, pages idem pour les pages et newsfeed_like les likes associés à chaque action d'un membre):
Cette requête affiche bien l'activité des amis de :id_utilisateur mais aussi l'activité des pages auxquelles il n'est pas abonné !
Modifié par Tchernobyl (27 Jul 2012 - 01:10)
Je fais appel à vous car j'ai une requête que je n'arrive pas à terminer d'écrire ! Une aide me permettra de mettre enfin en ligne mon projet.

J'ai une table newsfeed qui constitue le fil d'actualité de mon site : l'activité de chaque membre "user_ID" et de chaque page "page_ID" y est consigné. "action_type" désigne la nature de l'action et tout les champs non concernés par cette action sont mis à NULL. L'action "pg_subscription" désigne l'abonnement d'un membre à une page "pg_ID", "pg_link" une age qui est liée à une autre, etc.
EX: friendship désigne une liaison d'amitié avec un autre membre donc seul "friend_ID" sera remplie et les champs restant seront à NULL.
http://oi45.tinypic.com/2lu86z6.jpg
La table friends_linked sert à afficher un fil d'actualité qui concerne uniquement les amis de l'utilisateur :
http://i48.tinypic.com/2zfsch0_th.jpg
La table members_pages sert à afficher un fil d'actualité qui concerne uniquement les pages auxquelles l'utilisateur est abonné :
http://oi48.tinypic.com/16m5ahs.jpg
Le but est d'afficher à un membre l'actualité de ses amis et des pages auxquelles il est abonné via une seule requête (la table membres contient les infos membres, pages idem pour les pages et newsfeed_like les likes associés à chaque action d'un membre):
"SELECT COALESCE (n.user_ID, n.page_ID) AS subject_id,
COALESCE (mFrom.nom_utilisateur, pFrom.name) AS subject_name,
COALESCE (mFrom.miniature, pFrom.miniature2) AS subject_mini,
n.action_type AS action,
UNIX_TIMESTAMP(n.date_action) AS action_date,
IF( SUM( nl.liked ) - SUM( nl.disliked ) IS NULL, 0, SUM( nl.liked ) ) AS vote,
COALESCE (n.friend_ID, n.pg_ID, n.rk_ID) AS item_id,
COALESCE (mTo.nom_utilisateur, pTo.name, r.name) AS item_name,
COALESCE (mTo.miniature, pTo.miniature2, r.miniature2) AS item_mini,
FROM newsfeed n
LEFT OUTER JOIN friends_linked fl
ON n.user_ID = (fl.friend_from + fl.friend_to - :id_utilisateur)
LEFT OUTER JOIN members_pages mp
ON n.page_ID = mp.page AND mp.member = :id_utilisateur AND mp.deleted = '0'
LEFT OUTER JOIN membres mFrom
ON mFrom.id = n.user_ID
LEFT OUTER JOIN pages pFrom
ON pFrom.page_ID = n.page_ID
LEFT OUTER JOIN newsfeed_like nl
ON n.ID = nl.news_ID
LEFT OUTER JOIN membres mTo
ON mTo.id = n.friend_ID
LEFT OUTER JOIN pages pTo
ON pTo.page_ID = n.pg_ID
LEFT OUTER JOIN rankings r
ON r.ranking_ID = n.rk_ID
WHERE (fl.friend_from = :id_utilisateur OR fl.friend_to = :id_utilisateur)
AND fl.friend_confirm = :friend_confirm
GROUP BY n.ID
ORDER BY n.date_action DESC"
Cette requête affiche bien l'activité des amis de :id_utilisateur mais aussi l'activité des pages auxquelles il n'est pas abonné !
Modifié par Tchernobyl (27 Jul 2012 - 01:10)