Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Discussion: requete sql jointure

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    avril 2012
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : avril 2012
    Messages : 101
    Points : 18
    Points
    18

    Par défaut requete sql jointure

    Bonjour, j'ai un petit soucis avec les jointures;
    j'aimerais raccourcir mes requetes et faire si cela est possible:
    compter le nombre de membres, le nombre de commentaires, le nombre de membre ayant mi un commentaires , le nombre de jeux , le nombre de note et le nombre de membre ayant mi une note.
    J'ai 4 tables:
    table1 "membre": id_membre | login | ...
    table2 "jeux": id_jeu | nom | ...
    table3 "commentaires": id_commentaire | id_membre | id_jeu | commentaire | ...
    table4 "notes": id_note | id_membre | id_jeu | note | ...

    J'ai fais ça, mais le nombre de note et le nombre de membre ayant mi une note sont égale reciproquement au nombre de commentaires et nombre de membre ayant mi un commentaires..
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    $red = $bdd->prepare('SELECT COUNT(m.login) AS nbrLigne, 
    			     COUNT(c.id_commentaire) AS nbrCommentaire ,COUNT(DISTINCT c.id_membre) AS nbr_membre_commente,
    			     COUNT(j.id_jeu) AS nbrJeu,
    			     COUNT(n.id_note) AS nbrNote ,COUNT(DISTINCT n.id_membre) AS nbr_membre_note
    			     FROM commentaires c
    			     INNER JOIN  membres m ON m.id_membre = c.id_membre
    			     INNER JOIN jeux j ON j.id_jeu = c.id_jeu
    			     INNER JOIN notes n ON n.id_jeu = c.id_jeu');
    $red->execute();	
    ?>
    Si quelqu'un a une petite idée.. ou déja me dire si c est possible en une requete

  2. #2
    Expert Confirmé
    Avatar de christele_r
    Femme Profil pro Christele Rubneau
    Responsable de service informatique
    Inscrit en
    novembre 2009
    Messages
    1 361
    Détails du profil
    Informations personnelles :
    Nom : Femme Christele Rubneau
    Âge : 66
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : novembre 2009
    Messages : 1 361
    Points : 2 577
    Points
    2 577

    Par défaut

    Bonjour,
    Oui logique tout cela, car tu fait un select en demandant combien remplissent toutes les conditions !
    Il te faut utiliser un OR va lire la documentation de nos TOPOS, pour voir la meilleur syntaxe, ou sur google recherche
    "selet iner avec OR"

    Bonne journée
    Christele

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    avril 2012
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : avril 2012
    Messages : 101
    Points : 18
    Points
    18

    Par défaut

    Bonjour, merci pour ta réponse, j'avais déja cherché.. j'ai refais des recherches avec tes mots clés mais j'ai toujours pas trouvé une solution..
    J'ai vu qu on pouvais imbriquer des SELECT dans le 1er SELECT et faire mes COUNT() dans les SELECT imbriqués mais du coup ca rajoute des requetes, autant que je fasse les reqêtes separemment ca reviendrais au même.

  4. #4
    Expert Confirmé
    Avatar de christele_r
    Femme Profil pro Christele Rubneau
    Responsable de service informatique
    Inscrit en
    novembre 2009
    Messages
    1 361
    Détails du profil
    Informations personnelles :
    Nom : Femme Christele Rubneau
    Âge : 66
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : novembre 2009
    Messages : 1 361
    Points : 2 577
    Points
    2 577

    Par défaut

    Désolée, je ne suis pas assez forte sur ce point particulier, ne sachant pas, je ferais comme toi, un select par COUNT a obtenir !
    Tu sais il faudrait avoir des tables de plusieurs milliers de DATA pour que le ralentissement soit significatif !

  5. #5
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2012
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2012
    Messages : 764
    Points : 1 374
    Points
    1 374

    Par défaut

    Citation Envoyé par Royade Voir le message
    Bonjour, merci pour ta réponse, j'avais déja cherché.. j'ai refais des recherches avec tes mots clés mais j'ai toujours pas trouvé une solution..
    J'ai vu qu on pouvais imbriquer des SELECT dans le 1er SELECT et faire mes COUNT() dans les SELECT imbriqués mais du coup ca rajoute des requetes, autant que je fasse les reqêtes separemment ca reviendrais au même.
    Bonjour,

    pour utiliser cette technique il faudrait que tu fasse :
    Code sql :
    1
    2
    3
    SELECT t1.nbUser, t2.nbCommentaire 
    FROM ( SELECT COUNT(*) nbUser FROM user ) t1,
    ( SELECT COUNT(*) nbCommentaire FROM commentaire ) t2;

    En factorisant le nombre de requête pour qu'elle regroupe un maximum de donnée, par exemple le nombre d'utilisateur et le nombre de commentaire qu'ils ont posté avec une jointure externe il doit être possible d'avoir ces deux informations en une seul sous-requête.

    Ensuite les sous-requêtes ne sont pas a fuir obligatoirement si les tables sont bien indexées et les requêtes optimisées alors elles ne ralentiront pas tant que ça l'exécution.

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    avril 2012
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : avril 2012
    Messages : 101
    Points : 18
    Points
    18

    Par défaut

    Salut, merci pour ta réponse, mais ça ne répond pas a ma première question a savoir si une telle requête est possible:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $red = $bdd->prepare('SELECT COUNT(m.login) AS nbrLigne, 
    			     COUNT(c.id_commentaire) AS nbrCommentaire ,COUNT(DISTINCT c.id_membre) AS nbr_membre_commente,
    			     COUNT(j.id_jeu) AS nbrJeu,
    			     COUNT(n.id_note) AS nbrNote ,COUNT(DISTINCT n.id_membre) AS nbr_membre_note
    			     FROM commentaires c
    			     INNER JOIN  membres m ON m.id_membre = c.id_membre
    			     INNER JOIN jeux j ON j.id_jeu = c.id_jeu
    			     INNER JOIN notes n ON n.id_jeu = c.id_jeu');
    $red->execute();	
    ?>
    et si oui me dire où est mon erreur, christele ma donner le début d'une piste mais je ne trouve pas la solution .

  7. #7
    Membre éprouvé
    Homme Profil pro Yann
    IUT Informatique
    Inscrit en
    mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Nom : Homme Yann
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : mars 2011
    Messages : 411
    Points : 455
    Points
    455

    Par défaut

    Salut,

    Je ne suis pas sur à 100% mais je pense pas qu'elle puisse marcher correctement ta requête.

    Si j'ai bien compris ton site propose des jeux et les membres peuvent commenter/noter ou non les jeux?

    (J'essaie de bien cibler ce que tu veux avant de te donner une réponse pour pas t'induire en erreur ^^)

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •