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
    Membre averti
    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
    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
    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
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre Expert
    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
    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 Expert 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
    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
    Membre averti
    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
    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 Expert 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
    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 Expert
    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
    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
    Membre averti
    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
    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
    Membre averti
    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
    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
    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']
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre averti
    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
    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, 13h11
  2. Réponses: 3
    Dernier message: 01/04/2010, 10h04
  3. Réponses: 7
    Dernier message: 07/09/2008, 09h01
  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, 10h45
  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, 12h47

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