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

Langage PHP Discussion :

requete sql jointure


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Invité
    Invité(e)
    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
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    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
    Invité
    Invité(e)
    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 !
    Dernière modification par Bovino ; 26/12/2012 à 16h46. Motif: Inutile de citer un message pour y répondre ;)

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    une réponse vous a permis d'avancer ?

  6. #6
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 confirmé
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Points : 486
    Points
    486
    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 ^^)

Discussions similaires

  1. Requete sql jointure des tables et regroupement
    Par Abed_H dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 22/02/2009, 11h59
  2. requete sql jointure + sum() + group by?
    Par bylka dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/10/2008, 13h06
  3. requete sql jointure
    Par DIDIDIDA dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/03/2008, 12h02
  4. [SQL] Probleme requete sql (jointure)
    Par Pepito2030 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/09/2006, 19h15
  5. Requete SQL jointure plusieurs tables
    Par bibicha dans le forum Langage SQL
    Réponses: 1
    Dernier message: 31/08/2006, 18h38

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