Bonjour
J'ai un soucis avec une requête que je n'arrive pas à faire fonctionner correctement.
Je vous explique brièvement le contexte :
J'ai une table files, une tables users et une table users_friends
Je voudrais afficher tous les fichiers contenu dans la table files qui sont soit partagé entre tous les membres, soit entre ses amis. (chaque user peut définir des amis, qui ont du coups accès à ses fichiers)
Pour identifier les deux états, j'ai un champ file_etat qui est égale à 3 pour partage entre membre, et 4 pour partage entre amis.
Voici ma requête actuel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 SELECT *, f.user_id as 'uploader_id' FROM files f, users u LEFT JOIN users_friends uf on uf.user_id = '$user_id' WHERE u.user_id=f.user_id && ( f.file_auth='3' || (f.file_auth='4' && uf.user_id = '$user_id') ) GROUP BY f.file_ref ORDER BY f.file_id DESC
Le soucis, c'est que le résultat n'est pas tjrs correct du tout.
J'ai ensuite essayé de décortiqué la requête en 2 plus simples, mais san splus de succé :(avec la méthode à deux requêtes, je les merge ensemble ensuite à la main)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 // req 1 SELECT *, f.user_id as 'uploader_id' FROM files f, users u WHERE f.file_auth='3' && f.user_id=u.user_id ORDER BY f.file_id DESC // req 2 SELECT *, f.user_id as 'uploader_id' FROM files f, users_friends uf, users u WHERE u.user_id=f.user_id && f.file_auth='4' && uf.user_id = '$user_id' ORDER BY f.file_id DESC
Voici les 3 tables (j'ai enlevé quelque champs pour faire plus court) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 CREATE TABLE IF NOT EXISTS `files` ( `file_id` int(10) NOT NULL auto_increment, `file_ref` varchar(50) collate utf8_unicode_ci NOT NULL, `user_id` int(10) NOT NULL, `file_ext` varchar(15) collate utf8_unicode_ci NOT NULL, `file_name` varchar(50) collate utf8_unicode_ci NOT NULL, `file_auth` tinyint(1) NOT NULL default '2', UNIQUE KEY `file_id` (`file_id`), KEY `file_name` (`file_name`) ) CREATE TABLE IF NOT EXISTS `users` ( `user_id` int(10) NOT NULL auto_increment, `user_login` varchar(24) collate utf8_unicode_ci NOT NULL, `user_password` varchar(255) collate utf8_unicode_ci NOT NULL, PRIMARY KEY (`user_id`), KEY `pseudo` (`user_login`), KEY `password` (`user_password`) ) CREATE TABLE IF NOT EXISTS `users_friends` ( `f_id` int(10) NOT NULL auto_increment, `owner_user_id` int(10) NOT NULL, `user_id` int(10) NOT NULL, PRIMARY KEY (`f_id`) )
Merci d'avance à tous ceux qui ont envie de m'aider à régler le soucis.
Sky
Partager