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 :

Limiter le nombre de requêtes sur des données venant de 3 tables


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    Points : 44
    Points
    44
    Par défaut Limiter le nombre de requêtes sur des données venant de 3 tables
    Bonjour,

    Je développe une plateforme de traduction pour permettre aux membres de mon site d'aider à le traduire.

    Dans ce but, j'ai prévu la possibilité pour chaque phrase à traduire d'ajouter sa traduction bien sûr, mais aussi de voter pour les traductions proposées.

    Au niveau des tables cela se traduit en trois tables :

    - une table 1 qui liste les phrases à traduire
    - une table 2 qui liste les réponses proposées pour les phrases à traduire de la table 1
    - une table 3 qui liste les votes des réponses de la table 2

    La table 1 est reliée à la table 2 par une relation 1-n. La table 2 est reliée à la table 3 également par une relation 1-n

    Le problème c'est que je ne sais pas comment m'y prendre pour récupérer ses données en faisant le moins de requêtes possibles.

    Je veux pouvoir afficher la liste des phrases à traduire avec leurs traductions et les nombre de votes (un vote est positif ou négatif) qui ont été faits pour chaque traduction.

    Dans un premier temps je récupère la liste des phrases à traduire.

    Ensuite je fais une boucle pour chaque phrase récupérer ses réponses.

    Je me vois mal refaire une boucle sur chaque réponse pour récupérer les votes. je ne vois pas non plus comment m'en sortir avec des jointures.

    Pourriez vous m'aider ? J'espère que mon explication est claire.

  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 031
    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 031
    Points : 23 763
    Points
    23 763
    Par défaut
    Bonjour,

    Pour t'aider, il nous faut le schéma des différentes tables...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    Oké voilà un schéma des tables et leurs relations. En rouge c'est le nom de la table. Les clés primaires sont en vert, les autres champs en noir


  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Paradoxalement, tu dois pouvoir te passer de la table RESSOURCE et recueillir les infos souhaitées avec une seule requête mettant les deux autres tables en jointures externes
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select t.KEYWORD, t.VALUE,t.LANG,
    sum(if(v.vote),1,0) Pour,
    sum(if(NOT v.vote),1,0)
    FROM TRADUCTION t
    LEFT JOIN VOTE v
    USING ID
    GROUP BY t.ID
    le LEFT JOIN est là pour les traductions qui n'auraient pas reçu de vote.
    Tu peux ajouter un ORDER BY.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Merci bien pour cette réponse.

    Je découvre le SUM IF SQL, il va me simplifier la vie c'est dingue !

    Par contre il y a une erreur sur la parenthèse à priori, cela marche avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT t.KEYWORD, t.VALUE,t.LANG,
    sum(IF(v.vote,1,0)) Pour,
    sum(IF(NOT v.vote,1,0))
    FROM TRADUCTION t
    LEFT JOIN VOTE v
    USING ID
    GROUP BY t.ID
    Mais j'ai encore un soucis, une erreur MySQL sur la ligne 6 "USING ID". Mes deux tables ont bien ID comme clé. La table vote c'est une clé composé ID + IDMEMBER

    EDIT : j'ai résolu mon problème en ramplaçant USING ID par ON t.id = v.id

  6. #6
    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 031
    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 031
    Points : 23 763
    Points
    23 763
    Par défaut
    C'est parce qu'il faut mettre des parenthèses auteur des champs de jointure quand on utilise USING .

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

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

Discussions similaires

  1. Requête sur des données en ligne
    Par Oncle_Pete dans le forum SQL
    Réponses: 6
    Dernier message: 27/03/2012, 16h50
  2. Requête sur des données "chainées"
    Par jbrasselet dans le forum SQL
    Réponses: 4
    Dernier message: 17/03/2011, 08h45
  3. [JavaScript] Système de requêtes sur des données JSON
    Par kimjoa dans le forum Contribuez
    Réponses: 2
    Dernier message: 05/08/2010, 15h02
  4. [MySQL] Filtrer des données venant de 2 tables différentes
    Par Shinoda00 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/03/2009, 21h05
  5. Réponses: 11
    Dernier message: 18/10/2007, 12h49

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