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

Requêtes MySQL Discussion :

Mauvaise réponse d'une requête avec mysql_fetch_row


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Par défaut Mauvaise réponse d'une requête avec mysql_fetch_row
    Bonjour,

    Je ne voudrais pas communiquer ma mauvaise humeur à autrui, mais là je suis au prise avec une requête qui commence sérieusement à m'énerver. En tout j'ai dû passer une journée pour une méprisable petite requête.
    A vrai dire je me demande si le problème ne vient pas de la fonction php que j'utilise (sinon j'aurais posté dans le forum mysql).

    Bon, voilà la bête immonde :
    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
     
    $
    totalRep=
    "SELECT  
    distinct idCom 
    FROM 
    sousCommentaire 
    WHERE 
    idMembre='".$numeroConnexion."'
    ";
    $result = mysql_query($totalRep) ;
    $row = mysql_fetch_row($result);
    $total = $row[0];
     
    echo"<h1>$total</h1>";
    Voilà ça me renvoit 1 au lieu de 13. J'ai aussi essayé avec mysql_num_rows, avec count(distinct idCom) etc... J'ai essayé sans compter les commentaires laissés par le membre, j'ai essayé et encore essayé, j'ai simplifié ET CA FONCTIONNE PAS !

    Le but ?
    J'ai une table commentaire et une table sousCommentaire.
    La clef étrangère est idCom.
    Je veux compter tous les commentaires pour lesquels le membre à participé (y compris s'il est l'auteur du commentaire).
    Pour cela je compte ses réponses dans sousCommentaire.
    Normalement, compter chaque idCom (correspondant à l'id des commentaires) distinct, permet de retrouver le nombre de sujet différent pour lequel le membre à posté.
    On a aussi commentaire.idMembre=souscommentaire.idMembre.

    Voilà si vous vous sentez le courage d'anéantir cette requête, je vous offre sa peau en trophée.

  2. #2
    Membre Expert
    Avatar de Bidouille
    Inscrit en
    Mars 2003
    Messages
    1 297
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 1 297
    Par défaut
    Fais un essai sous PhpMyAdmin pour voir

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Par défaut
    Ah oui j'ai pas le réflexe.

    Bon j'ai copié la requête ci-dessous dans phpMyAdmin :
    SELECT
    distinct idCom
    FROM
    sousCommentaire
    WHERE
    idMembre=7
    ça me renvoit 13 tuples, ce qui doit être le cas.

    Donc ? C'est quoi le problème ? mysql_fetch_row?
    C'est même pas le script après puisque le echo me renvoit 1 juste après la requête, comme dit plus haut.

  4. #4
    Membre expérimenté
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Par défaut
    le problème, c'est que tel que tu l'a fait, ça te renvoie un tableau qui contient l'ensemble de tes enregistrements. Il faut donc les passer un à un pour faire une somme, ou construire ta requête de façon à ce qu'elle te sorte la somme directement ... (jette un oeil du coté de COUNT en SQL)
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Par défaut
    Bon alors,

    J'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $totalRep="SELECT   idCom 
    FROM sousCommentaire 
    WHERE idMembre='".$numeroConnexion."'";
    $result = mysql_query($totalRep) ;
    $somme=0;
    while ($row = mysql_fetch_row($result)) {
    $somme += $row[0];
    }
     
    echo"<h1>$somme</h1>";
    C'est magique, ça me renvoit 127. Y'a même pas 127 tuples dans la table.

    (jette un oeil du coté de COUNT en SQL)
    J'ai essayé count, j'ai essayé count(idCom), count(distinct idCom) etc...

    Comme j'ai dit, dans phpMyAdmin ma requête renvoit le bon résultat.
    Donc le problème doit venir de mysql_fetch_row je pense. (pour la concaténation, je sais pas on m'a dit de faire comme ça, je verrais ça après, on m'avait dit que c'était plus sur).

  6. #6
    Invité
    Invité(e)
    Par défaut
    enleve juste le distinct ça devrait faire laffaire.
    si tu veux utiliser le distinct il faut associer les tables commentaire et souscommentaire;je mexplik:
    si tu as une table commentaire avec comme enregistrement
    commentaire(1,....)
    commentaire(2,....)
    commentaire(3,....)
    [donc 3 enregistrement]
    et ensuite une table sous commentaire

    souscommentaire(1,1,....)
    souscommentaire(2,1,....)
    souscommentaire(3,1,....)

    vu que ta mis un distinct il va te regrpoupé en un seul enregistrement

    je sais pas si jai été assez clair

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Par défaut
    Non je peux pas enlever le distinct, je veux que ça soit distinct.

    mais je viens d'y arriver comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $totalRep="SELECT  DISTINCT idCom 
    FROM sousCommentaire 
    WHERE idMembre='".$numeroConnexion."'";
    $result = mysql_query($totalRep) ;
    $row = mysql_num_rows($result);
    $total = $row;
    Je sais pas qui est le qui m'avait conseillé d'utiliser mysql_fetch_row, je sais même pas à quoi sert cette fonction, je la bannie de mes scripts !!!!!

    (merci pour vos réponses)

  8. #8
    Membre expérimenté
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Par défaut
    Essaie ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $result = mysql_query($totalRep) ;
     
    $somme = 0;
    while ($row = mysql_fetch_row($result)) {
    $somme += $row[0];
    }
    echo"<h1>$somme</h1>";
    Sinon, dans ta requête, tu n'est pas obligé de concaténer ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $totalRep="SELECT distinct idCom FROM sousCommentaire WHERE idMembre='$numeroConnexion'";
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par psychoBob
    Non je peux pas enlever le distinct, je veux que ça soit distinct.

    mais je viens d'y arriver comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $totalRep="SELECT  DISTINCT idCom 
    FROM sousCommentaire 
    WHERE idMembre='".$numeroConnexion."'";
    $result = mysql_query($totalRep) ;
    $row = mysql_num_rows($result);
    $total = $row;
    tu te contredirais pas un peu ?

    Citation Envoyé par psychoBob
    ...
    Voilà ça me renvoit 1 au lieu de 13. J'ai aussi essayé avec mysql_num_rows, avec count(distinct idCom) etc... J'ai essayé sans compter les commentaires laissés par le membre, j'ai essayé et encore essayé, j'ai simplifié ET CA FONCTIONNE PAS !
    ...

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

Discussions similaires

  1. [WD12] Réponse d'une requête avec paramètres
    Par Anthony-28 dans le forum WinDev
    Réponses: 1
    Dernier message: 26/06/2009, 11h13
  2. une requête avec plusieurs INNER JOIN, cmt faire ?
    Par elhosni dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/01/2006, 17h55
  3. optimisation d'une requête avec jointure
    Par champijulie dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 07/07/2005, 09h45
  4. Analyse de code HTML en réponse a une requête post.
    Par ghost942 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 04/06/2005, 21h40
  5. recuperer une requête avec le composant TIBSQL ??
    Par vbcasimir dans le forum Bases de données
    Réponses: 11
    Dernier message: 31/05/2005, 12h05

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