IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Requête sur 3 tables avec conditions


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    46
    Points
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2009
    Messages : 46
    Points : 74
    Par défaut Requête sur 3 tables avec conditions
    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é :
    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
    (avec la méthode à deux requêtes, je les merge ensemble ensuite à la main)


    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

  2. #2
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    46
    Points
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2009
    Messages : 46
    Points : 74
    Par défaut
    Bonsoir,
    J'ai compris pourquoi ça marche pas, je n'ai pas lié deux tables entre elles.

    Je suis resté à la méthode avec 2 requêtes, mais les résultats sont maintenant corrects !

  3. #3
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    90
    Points
    73
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Points : 73
    Par défaut
    Ne pas oublier de marquer la discussion comme résolue

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. requête sur 2 tables avec condition
    Par boubout dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/02/2010, 09h31
  2. Requête sur plusieurs tables avec DLookup ?
    Par Falcdyr dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 07/05/2008, 09h50
  3. Réponses: 4
    Dernier message: 05/03/2008, 10h32
  4. problème sur requête sur 3 tables avec une somme
    Par tomguiss dans le forum Requêtes
    Réponses: 4
    Dernier message: 27/12/2007, 17h44
  5. Réponses: 12
    Dernier message: 12/06/2006, 15h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo