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

  1. #1
    Membre confirmé
    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
    Points : 472
    Points
    472
    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.
    C'est pas parce que j'ai tort que vous avez raison.

  2. #2
    Membre chevronné
    Avatar de Bidouille
    Inscrit en
    Mars 2003
    Messages
    1 274
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 1 274
    Points : 1 991
    Points
    1 991
    Par défaut
    Fais un essai sous PhpMyAdmin pour voir
    Rédacteur PHP / Delphi ADO / Novell / OpenOffice.org

    Inutile de m'envoyer vos questions par MP, je ne réponds que par le forum.

  3. #3
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    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

  4. #4
    Membre confirmé
    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
    Points : 472
    Points
    472
    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.
    C'est pas parce que j'ai tort que vous avez raison.

  5. #5
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    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

  6. #6
    Membre confirmé
    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
    Points : 472
    Points
    472
    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).
    C'est pas parce que j'ai tort que vous avez raison.

  7. #7
    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

  8. #8
    Membre confirmé
    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
    Points : 472
    Points
    472
    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)
    C'est pas parce que j'ai tort que vous avez raison.

  9. #9
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    ben a mon humble avis, tu ne vas pas la bannir longtemps

    ta solution fonctionne bien sûr, mais tu devrais plutôt utiliser count() dans ta requête comme te la trés justement précisé titoumimi...


  10. #10
    Invité
    Invité(e)
    Par défaut
    si tu veux pas enlever distinct, utilise count

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $totalRep="SELECT  count(idCom) as total
    FROM sousCommentaire 
    WHERE idMembre='".$numeroConnexion."'";
    $result = mysql_query($totalRep) ;
    echo  mysql_result($result,0,"total");

  11. #11
    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 !
    ...

  12. #12
    Membre confirmé
    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
    Points : 472
    Points
    472
    Par défaut
    ça fonctionne pas avec count() j'ai essayé 707000 fois.

    Si je me contredis sans doute, mais si j'écris tout ce que j'ai essayé ça va faire un pavé de 5000 lignes.
    C'est pas parce que j'ai tort que vous avez raison.

  13. #13
    Membre confirmé
    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
    Points : 472
    Points
    472
    Par défaut
    Bon parce que je vous aime bien j'ai essayé ça et ça fonctionne aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $totalRep="SELECT  count(DISTINCT idCom ) AS idCom
    FROM sousCommentaire 
    WHERE idMembre='".$numeroConnexion."'";
    $result = mysql_query($totalRep) ;
    while($R=mysql_fetch_array($result))
    {
    //on récupère le total
    $total=$R[idCom]
    ;}
    Je vois pas pourquoi c'est mieux mais bon... plus rapide sans doute. Avant ça foirait avec count parce que je voulais le récupérer avec mysql_fetch_row ou des mysql_num_rows. Enfin je pense que c'était pour ça.
    C'est pas parce que j'ai tort que vous avez raison.

  14. #14
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Salut,

    content que tu aies solutionné ton souci

    pour mysql_fetch_row() voici un exemple que tu aurais pu utilisé dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // requete
    $totalRep="SELECT  COUNT(DISTINCT idCom) AS nombre_id
          FROM sousCommentaire 
          WHERE idMembre='".$numeroConnexion."'";
    $result = mysql_query($totalRep) or die (mysql_error());
     
    //on récupère le total
    $R=mysql_fetch_row($result);
    $total=$R[0];
    voila, bon développement

  15. #15
    Membre confirmé
    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
    Points : 472
    Points
    472
    Par défaut
    Ok, je note ce code pour une prochaine aventure, merci
    C'est pas parce que j'ai tort que vous avez raison.

+ 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