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 :

Récupérer nb d'entrées dans une jointure


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 28
    Points
    28
    Par défaut Récupérer nb d'entrées dans une jointure
    Bonjour à tous,
    J'ai encore un souci dans une requête qui fait appel à deux bases de données.
    En fait, j'ai une liste de rubriques (1ère bdd), et pour chaque rubrique je voudrais indiquer le nb d'images disponibles (2eme bdd).

    Ma jointure est comme ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $reponse = $bdd->query('SELECT r.date_sortie, r.id, r.nom, r.support, r.prix, i.up_id_rubrique FROM rubrique r INNER JOIN images i ON r.id = i.up_id_rubrique WHERE r.categorie =\'Studio\' ORDER BY r.date_sortie DESC');
    Ma liste est comme ça :
    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
    29
    30
    31
     
    <table width="100%">
    <h1>CALENDRIER DES SORTIES DE STUDIO</h1>
    <tr id="entete-tableau">
    <td width="90px">Date de sortie</td>
    <td>Titre</td>
    <td>Eléments disponibles</td>
    <td>Support</td>
    <td width="75px">Prix</td>
    </tr>
    <?php
    while ($donnees = $reponse->fetch())
    {
    ?>	
    <tr id="tableau">
    <td><?php echo $donnees['date_sortie'] ?></td>
    <td><div><a href="/galerie.php?id=<?php echo $donnees['id']?> "/><?php echo $donnees['nom'] ?></a></div></td>
     <td>
    <?php 
    $nb = count(array($donnees['up_id_rubrique']));
    echo $nb;
    ?>
    </td>
    <td><?php echo $donnees['support'] ?></td>
    <td><?php echo $donnees['prix'] ?> euros</td>
    </tr>
    <?php
    }
     $reponse->closeCursor();
    ?>
    </table>
    Or si je fais comme cela, ma requête retourne autant de lignes qu'il y a de fichiers disponibles.
    Le souci semble être là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <td>
    <?php 
    $nb = count(array($donnees['up_id_rubrique']));
    echo $nb;
    ?>
    </td>
    Je souhaiterais juste qu'elle compte le nb d'entrées :
    Auriez-vous une idée ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je n'ai pas validé mais avec un COUNT :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT r.date_sortie, r.id, r.nom, r.support, r.prix, COUNT(i.up_id_rubrique)
    FROM rubrique r INNER JOIN images i ON r.id = i.up_id_rubrique 
    WHERE r.categorie ='Studio' 
    GROUP BY i.up_id_rubrique
    ORDER BY r.date_sortie DESC

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    plutôt comme ça non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT r.date_sortie, r.id, r.nom, r.support, r.prix, COUNT(i.up_id_rubrique)
    FROM rubrique r INNER JOIN images i ON r.id = i.up_id_rubrique 
    WHERE r.categorie ='Studio' 
    GROUP BY r.date_sortie, r.id, r.nom, r.support, r.prix
    ORDER BY r.date_sortie DESC

  4. #4
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Oui, sinon les date_sortie, id, nom, support, prix seront sélectionnés "aléatoirement". MySQL est laxiste, logiquement il devrait refuser un GROUP BY non groupés sur tous les champs du SELECT

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Génial, la réponse de Sabotage fonctionne super.
    Il fallait faire le COUNT dans la requête, (et grouper par "up_id_rubrique"), je ne savais pas qu'on pouvait faire comme ça.
    Merci encore,
    Très bonnes fêtes à tous !

  6. #6
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Lis les 2 réponses précédentes quand même afin de ne pas avoir de mauvaises surprises; )

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    Citation Envoyé par Madfrix Voir le message
    Oui, sinon les date_sortie, id, nom, support, prix seront sélectionnés "aléatoirement". MySQL est laxiste, logiquement il devrait refuser un GROUP BY non groupés sur tous les champs du SELECT
    oui et je dirais même plus que le group by portait sur le champ du count ..

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Autant pour moi, effectivement, j'ai un bug. Ce n'est pas le compte qu'il me donne mais le numéro des rubriques...
    Je re-checke et reviens vers vous,
    Merci beaucoup

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Effectivement, au final, il semble que la 2e requête "fonctionne", mais elle ne retourne pas le résultat demandé. (ma cellule s'affiche vide).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT r.date_sortie, r.id, r.nom, r.support, r.prix, COUNT(i.up_id_rubrique)
    FROM rubrique r INNER JOIN images i ON r.id = i.up_id_rubrique 
    WHERE r.categorie ='Studio' 
    GROUP BY r.date_sortie, r.id, r.nom, r.support, r.prix
    ORDER BY r.date_sortie DESC
    Peut-être est-ce parce que je n'appelle pas les données comme il faut.
    je l'appelle tout bêtement comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <td><?php echo $donnees['up_id_rubrique'];?> </td>
    Comment dois-je appeler le résultat de ce COUNT ?

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    utilise un alias
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT r.date_sortie, r.id, r.nom, r.support, r.prix, COUNT(i.up_id_rubrique) as compte
    et appelle $donnees['compte']

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Super Merci, ça cartonne !!!!
    Très bonnes fêtes à tous !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/12/2010, 14h11
  2. Réponses: 3
    Dernier message: 01/04/2010, 11h04
  3. Réponses: 7
    Dernier message: 07/09/2008, 10h01
  4. Récupérer l'alias ou le nom des tables dans une jointure
    Par Morgoth777 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 03/07/2008, 11h45
  5. Récupérer chaine caractère entrée dans une box
    Par clem56 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 10/06/2008, 13h47

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