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

PHP & Base de données Discussion :

Requête Count dans Select [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 59
    Par défaut Requête Count dans Select
    Bonjour,
    Je cherche à introduire une requête count au sein d'une boucle while qui fetch une requête select.

    En gros je crée un forum basique.
    j'arrive à récupérer les informations (comme le titre, le message, ect) mais au moment de définir le nombre de réponses par exemple, pas moyen, je trouve pas comment faire.

    Un petit coup de main svp ?

    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
     
    	echo'<table width="60%" border="1" align="center" bgcolor="#CCCCCC" cellspacing="1" cellpadding="0">
      <tr>
        <td>Nom</td>
      </tr>';
     
     
     
    $reponse = $bdd->query('SELECT * FROM Forum');
     
    while ($donnee = $reponse->fetch())
     
    {
    echo '<tr>
        <td>';   
    	echo '<strong><a href="VoirForum.php?Forum='. $donnee['ID'] .'">' . $donnee['NomForum'] . '</a></strong> <br/>';
    echo $donnee['Description'] . '<br/><br/>'; 
     
    echo $Nbr;
    }
    $reponse->closeCursor();
     
    echo '</td></tr>';
     
     
    echo'</table>';

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,

    Votre méthode est horrible.

    Comment détermine-t-on le nombre de réponses ?
    Il faut que vous nous présentiez un peu plus les tables existantes, car là on ne peux pas deviner ce qui ce cache derrière tout ca.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 59
    Par défaut
    En ma méthode est horrible ?

    Ma base contient 3 table
    1 user
    1 NomForum
    1 message
    Le count doit contenir le nombre de message qui porte identifiant du forum choisit : id_liaison_forum

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Elle n'est pas bonne car vous traitez d'une manière itérative le problème alors que vous utilisez le langage SQL qui lui est ensembliste.

    Alors sur des petites volumétries vous ne verrez rien de spécial, par contre si votre forum grossit ça va devenir catastrophique.


    Bref,

    Je pars du principe que id_liaison_forum est présent dans votre table "message" sinon il faudra faire des jointures.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select id_liaison_forum, count(*)
    from message
    group by id_liaison_forum
    Un appel à cette requête et vous aurez tout en mémoire du côté de votre applicatif (et pas besoin du coup de faire X requêtes à chaque fois)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 59
    Par défaut
    J'aurais peut être dû préciser que ceci est un projet uniquement destiné à mettre en pratique mon apprentissage du php et sql (bref je suis un noob^^)

    J'ai essayer de comprendre et voici ce qui en ressort.
    Code php : 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
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    echo'<table width="60%" border="1" align="center" bgcolor="#CCCCCC" cellspacing="1" cellpadding="0">
      <tr>
        <td>Nom</td>
    	 <td>Messages</td>
      </tr>';
     
     
     
    $reponse = $bdd->query('
    SELECT 
    Forum.ID ID, Forum.NomForum Nom, Sujet.ID_Liaison_Forum, count(*) Tot
    FROM 
    Forum
    LEFT JOIN
    Sujet
    ON
    Forum.ID = Sujet.ID_Liaison_Forum
    GROUP BY
    ID
     
     
    ');
     
    while ($donnee = $reponse->fetch())
     
    {
    echo '<tr>
        <td>';   
    	echo '<strong><a href="VoirForum.php?Forum='. $donnee['ID'] .'">' . $donnee['Nom'] . '</a></strong> <br/></td>';
    //echo $donnee['Description'] . '<br/><br/>'; 
     
    echo '<td>' . $donnee['Tot'] . '</td>';
    }
    $reponse->closeCursor();
     
    echo '</tr>';
     
     
    echo'</table>';

    Ceci semble marcher, sauf quand le Forum est vide car Tot me retourne 1 mais cela est un détail.

    Y a-t-il une limite au nombre de jointures permises ?

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Votre requête devrait être écrite de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Forum.ID ID, Forum.NomForum Nom, tmp.Tot
    FROM Forum
    LEFT JOIN (select ID_Liaison_Forum, count(*) as tot from Sujet group by ID_Liaison_Forum) as tmp ON Forum.ID = tmp.ID_Liaison_Forum

    Dans la requête que vous avez postée vous utilisez une écriture spécifique MySql totalement foireuse qui risque de ne plus marcher sur une version +1 de ce SGBD.

    => lors d'une agrégation (GROUP BY) toutes les colonnes de la clause SELECT doivent être présentes dans la clause GROUP BY, sinon il faut utiliser une fonction d'agrégation sur les colonnes (min / max / sum / etc..)



    Pour votre seconde question, limite s'il y a, sera bien au dessus de ce que vous pourrez avoir.

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

Discussions similaires

  1. La requête COUNT(*) dans MySQL
    Par amanienig dans le forum Requêtes
    Réponses: 1
    Dernier message: 07/04/2014, 11h51
  2. [AC-2007] Problème requête count dans VBA ACCESS
    Par carophil dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 02/06/2010, 16h11
  3. Réponses: 2
    Dernier message: 18/01/2010, 16h01
  4. Extraire d'une portion de chaîne dans SELECT d'une requête
    Par Anne1969 dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 16/03/2006, 08h29
  5. Requête (select dans select)
    Par zut94 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 03/03/2006, 11h38

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