Je galère depuis un 2 jours sur une requête que je n'arrive pas à faire, merci de me donner quelques indications ou conseils .
Je schématise la base :
---------------------------
Code : Tout sélectionner
--
-- Structure de la table `users`
--
CREATE TABLE `users` (
`user_id` mediumint(8) NOT NULL default '0',
`user_photo` varchar(100) default NULL,
`user_nom` varchar(255) default NULL,
`user_prenom` varchar(100) default NULL,
PRIMARY KEY (`user_id`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Structure de la table `users_friends`
--
CREATE TABLE `users_friends` (
`friend_id` mediumint(8) NOT NULL auto_increment,
`user_id` mediumint(8) NOT NULL default '0', ==> celui qui demande à être un ami
`posterfriend_id` mediumint(8) NOT NULL default '0', ==> celui qui accepte d'être un ami
`comments_friend` text NOT NULL,
`confirm_friend` mediumint(1) NOT NULL default '0',
`time_friend` int(11) default NULL,
PRIMARY KEY (`friend_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=32 ;
Je schématise l'exemple :
------------------------------
A est ami avec B
A est ami avec C
D est ami avec B
D est ami avec C
Mon souhait est de faire une requête ( imbriquées ou pas ) qui propose à A s'il connaît D car ils ont 2 amis en commun ( proposer d'être ami avec qq1 s'ils ont au moins 2 amis en commun )
Alors, après tes tentatives qui sont restées vaines je suis arrivé à celle ci et qui ne marche pas :
Code : Tout sélectionner
SELECT uc . * , u.user_id, u.user_photo, u.user_nom, u.user_prenom
FROM users_friends uc, users u
WHERE
(uc.user_id
IN (
<! debut de la liste du connecté qui marche !>
SELECT u.user_id
FROM users_friends uc, users u
WHERE u.user_id <> -1
AND (
uc.user_id =3178 ==> l'id = du connecté
OR uc.posterfriend_id =3178
)
AND (
u.user_id = uc.posterfriend_id
OR u.user_id = uc.user_id
)
AND u.user_id !=3178
AND uc.confirm_friend =1
<! fin de la liste du connecté qui marche !>
)
OR
uc.posterfriend_id
IN (
<! debut de la liste du connecté qui marche !>
SELECT u.user_id
FROM users_friends uc, users u
WHERE u.user_id <> -1
AND (
uc.user_id =3178
OR uc.posterfriend_id =3178
)
AND (
u.user_id = uc.posterfriend_id
OR u.user_id = uc.user_id
)
AND u.user_id !=3178
AND uc.confirm_friend =1
<! fin de la liste du connecté qui marche !>
)
)
AND (
uc.user_id !=3178
OR uc.posterfriend_id !=3178
)
ORDER BY u.user_id DESC