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 multi tables Jointures et agrégations


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Points : 120
    Points
    120
    Par défaut Requête multi tables Jointures et agrégations
    Bonjour à tous,

    Dans le cadre d'un système de validations de photos j'ai la structure de table (volontairement simplifiée) suivante :

    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
    28
     
    -- Table lignes
     
    CREATE TABLE IF NOT EXISTS `images` (
      `id` int(11) NOT NULL auto_increment,
      PRIMARY KEY  (`id`),
    ) ;
     
    -- Structure de la table `versions`
     
    CREATE TABLE IF NOT EXISTS `versions` (
      `id` int(11) NOT NULL auto_increment,
      `image_id` int(11) default NULL,
      `fichier` varchar(255) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ;
     
    -- Structure de la table `validations`
     
    CREATE TABLE IF NOT EXISTS `validations` (
      `id` int(11) NOT NULL auto_increment,
      `version_id` int(11) default NULL,
      `utilisateur_id` int(11) default NULL,
      `valeur` int(1) NOT NULL,
      PRIMARY KEY  (`id`),
      KEY `version_id` (`version_id`),
      KEY `utilisateur_id` (`utilisateur_id`)
    )  ;
    Le système est basé sur une double validation des images.
    Une ligne possède n versions qui possède n validations.
    Une "image" est considérée comme validée si elle possède une "version" ayant 2 "validations" avec le champ valeur à 1 (ou somme de validations.valeur = 2). Une photo est rejetée si la somme est égale à -2. Si égal à 0, on provoque un arbitrage.

    J'éprouve quelques difficultés à réaliser des requêtes du type :

    RETOURNE toutes les images à valider ( par encore de validations associées à la version || score = 1 || score = -1)
    RETOURNE toutes les images validée (score = 2)
    RETOURNE toutes les images rejetéé (score = -2)

    etc...

    car je dois faire une requête avec jointure (jusque ici tout va bien), mais tenant compte d'une agrégation du type SUM(validations.valeur). J'ai réussi à me débrouiller pour le 2è et 3è exemple avec des IN des HAVING et des sous requêtes mais c'est loin d'être satisfaisant à mon sens.

    J'espère avoir été compréhensible, merci d'avance pour votre aide !

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Bonjour,

    Pour remettre un peu les notions en place, jette un oeil dans l'excellent tutoriel suivant : http://sqlpro.developpez.com/cours/sqlaz/ensembles/.
    Attention, sous MySQL, le GROUP BY est plus permissif que sous d'autres SGBD, ce dont il faut se méfier.

    ced

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    merci ! j'ai lu cet excellent tuto mais bon je galère toujours autant

    [edit] bon j'ai réussi à améliorer ma requête avec une jointure LEFT OUTER et un HAVING ! merci pour le lien sur le tuto

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

Discussions similaires

  1. Requète multi-tables relationnelles avec jointure
    Par alextva dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/11/2009, 09h43
  2. modifier des données dans une requête multi table
    Par Bluman dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 05/02/2008, 10h00
  3. PB requête multi-tables
    Par duchnok dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/01/2008, 12h25
  4. Requête multi-tables avec BDE
    Par Ptit_bouchon dans le forum Bases de données
    Réponses: 9
    Dernier message: 03/01/2008, 12h58
  5. problème de requête multi-table
    Par dergips dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 23/07/2007, 18h21

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