par
Tracker » 06 oct. 2007, 14:43
Alors explications:
1. Qui sont tes amis ?
Réponse: Les gens que tu références comme amis (A) + ceux qui t'ont référencé (B)
L'opérateur SQL UNION est parfait pour ce traitement:
select ami_from as (toi), ami_to as (ceux que tu références) == (A)
UNION == +
select ami_to as (toi), ami_from as (ceux qui t'ont référencé) == (B)
2. On utilise le principe des tables/vues anonymes, introduit dans mysql 4.?? en même temps
que les sous requêtes.
Explication: On peut ecrire une requête et la nommer dynamiquement pour s'en servir comme d'une vue. syntax: ( select .... ) [nom_vue]
Donc tes amis deviennent la vue suivante, nommée 'a':
Code : Tout sélectionner
(
SELECT ami_from AS uid, ami_to AS aid, ami_confirm, ami_date FROM amis
union
SELECT ami_to AS uid, ami_from AS aid, ami_confirm, ami_date FROM amis
) a
3. Ensuite, on relie les tables:
Qui est tu ? un utilisateur connecté, donc un membre --> _user
Qui sont tes amis ? des membres -> _amis
On arrive donc à la portion de requête:
Code : Tout sélectionner
FROM membres _user
INNER JOIN
(
SELECT ami_from AS uid, ami_to AS aid, ami_confirm, ami_date FROM amis
union
SELECT ami_to AS uid, ami_from AS aid, ami_confirm, ami_date FROM amis
) a
ON a.uid = _user.id
AND a.ami_confirm = '1'
LEFT JOIN membres _amis
ON a.aid = _amis.id
4. Enfin on traite l'histoire du "online", des champs retournés, et la condition _user = session_id
ps: Tu demandais pourquoi le [inner join]. Par ce que tu veux seulement les _user qui ont des amis, cad la condition a.uid = _user.id doit éliminer les éléments de _user ne la satisfaisant pas.
Pour conclure, il faut penser SQL

Alors explications:
1. Qui sont tes amis ?
Réponse: Les gens que tu références comme amis (A) + ceux qui t'ont référencé (B)
L'opérateur SQL UNION est parfait pour ce traitement:
select ami_from as (toi), ami_to as (ceux que tu références) == (A)
UNION == +
select ami_to as (toi), ami_from as (ceux qui t'ont référencé) == (B)
2. On utilise le principe des tables/vues anonymes, introduit dans mysql 4.?? en même temps
que les sous requêtes.
Explication: On peut ecrire une requête et la nommer dynamiquement pour s'en servir comme d'une vue. syntax: ( select .... ) [nom_vue]
Donc tes amis deviennent la vue suivante, nommée 'a':
[code]
(
SELECT ami_from AS uid, ami_to AS aid, ami_confirm, ami_date FROM amis
union
SELECT ami_to AS uid, ami_from AS aid, ami_confirm, ami_date FROM amis
) a
[/code]
3. Ensuite, on relie les tables:
Qui est tu ? un utilisateur connecté, donc un membre --> _user
Qui sont tes amis ? des membres -> _amis
On arrive donc à la portion de requête:
[code]
FROM membres _user
INNER JOIN
(
SELECT ami_from AS uid, ami_to AS aid, ami_confirm, ami_date FROM amis
union
SELECT ami_to AS uid, ami_from AS aid, ami_confirm, ami_date FROM amis
) a
ON a.uid = _user.id
AND a.ami_confirm = '1'
LEFT JOIN membres _amis
ON a.aid = _amis.id
[/code]
4. Enfin on traite l'histoire du "online", des champs retournés, et la condition _user = session_id
ps: Tu demandais pourquoi le [inner join]. Par ce que tu veux seulement les _user qui ont des amis, cad la condition a.uid = _user.id doit éliminer les éléments de _user ne la satisfaisant pas.
Pour conclure, il faut penser SQL :wink: