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 :

requete conjointe a 3 tables [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut requete conjointe a 3 tables
    Bonjour,
    je peine depuis un certain temps sur le résultat d'une requete avec 3 tables jointés qui affichent 2 lignes dans un tableau alors qu'il y en a 3 résultats.

    pourtant, mysql_num_rows me donne 3 résultats

    a n'y rien comprendre
    alors voici
    Je sais qu'il y a 3 resultats se rapportant au sujetId
    je fais cette requete :
    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
    32
    33
    34
    35
    <?php
    if( isset($_GET['idList']) && is_numeric($_GET['idList']) ) {
     
    		$idList = $_GET['idList'];
     
    		echo $idList.'<br/>'; //Pour verifier si le bon id du sujet et c est le bon
    	}
     
    $sqlparPage = "SELECT F.membreID, F.sujetID, F.messageForum, DATE_FORMAT(F.dateMessage,'%d/%m/%y à %Hh %i') AS dateMessage, F.statut,
    		M.id, M.pays, M.ville,  M.pseudo, M.sexe, M.photo, M.categoriemembre, S.sujet AS sujet
    			FROM forummessages AS F
    				LEFT OUTER JOIN membres As M
    				ON M.id = F.membreID
    				LEFT OUTER JOIN sujetForum As S
    				ON F.sujetID = S.id
    			
    			WHERE F.statut =1 AND F.sujetID = $idList
    			ORDER BY dateMessage ASC LIMIT $limit_start, $pagination ";
     
    				$data = mysql_query($sqlparPage) or die('Erreur - table forumMessages ' . mysql_error());
    			$Nbre = mysql_num_rows($data);
    		echo 'par page'. $Nbre.'<br/>';
     
    				$tableau_res = array();
     
    			while($info = mysql_fetch_array($data, MYSQL_ASSOC)) {	
     
    				$tableau_res[$info['id']] = $info;	
    			}
     
     
    		print_r($tableau_res);
     
     
    ?>
    print_r($tableau_res); a 2 résulttats alors que
    $Nbre = mysql_num_rows($data); en contient 3

    si quelqu'un pourrais m'aider la dessus ca serait tres apprécier
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait!
    Mark Twain.

  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
    Tu deux avoir 2 retours avec le même membre, donc le même "id"
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut
    Il est vrai que j'utilise le membreID dans 2 tables soit dans f et dans M
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait!
    Mark Twain.

  4. #4
    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
    Le problème n'est pas sur membreID, ni sur le fait d'avoir des colonnes portant le même nom.

    Le problème est que tu ranges tes résultats par "id"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tableau_res[$info['id']]
    et donc si ta requête produit plusieurs lignes avec le même "id", tu ne récupères que le dernier dans ton tableau.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut
    sabotage je comprends ce uqe tu veux dire mais je ne connais pas d'autres facon de le stocker !!
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait!
    Mark Twain.

  6. #6
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut
    ok sabotage et encore merci !

    j'ai remplacé le $tableau_res par un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ($donnees = mysql_fetch_array($data)) {
    dans les lignes du tableau et ca resout le probleme

    ici, je voulais utiliser les $tableau_res afin de pouvoir ré-utiliser les memes ressources 2 fois dans un autre affichage

    Habituellement, je n'ai pas de probleme avec mon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tableau_res[$info['id']] = $info;
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait!
    Mark Twain.

  7. #7
    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
    Ca marche si tu as un id unique en résultat, mais ce n'est pas ton cas avec l'id du membre dans ta requête.

    Sinon simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tableau_res[] = $info;
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut
    merci encore sabotage !

    c'est tout a fait ca avec le $tableau_res !!

    mille fois merci !
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait!
    Mark Twain.

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

Discussions similaires

  1. Requete insertion dans une table sous delphi?
    Par EssaiEncore dans le forum Bases de données
    Réponses: 5
    Dernier message: 09/01/2006, 15h12
  2. Requete : création d'une table et insertion
    Par tafamilk dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/12/2005, 21h51
  3. Requete speciale jumelant 2 tables
    Par joxbl dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/11/2005, 11h56
  4. Requete sur la meme table
    Par krak70 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/09/2005, 09h59
  5. Requete COUNT sur 3 tables
    Par Le-Cortex dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/09/2005, 10h39

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