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 :

Problème requete sur plusieurs table


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 23
    Points : 15
    Points
    15
    Par défaut Problème requete sur plusieurs table
    Bonsoir, tout le monde!!!

    Je viens vous demandez votre aide car j'ai un soucis avec une requête....

    Pour vous présentez un petit peu le contexte...Je cherche à afficher une liste de publication dans un tableau avec le nom de ces auteurs...pour celà, je cherche a récupérer le nom et le prénom du ou des auteurs dans la table utilisateur et son équipe dans la table équipe..

    Mais voilà, j'arrive a récupérer les informations sur la publi ( Titre, description...), mais pas sur ces auteurs :

    J'ai l'erreur suivante :

    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-5.3.3\www\liste_publication.php on line 57
    Notice: Undefined variable: auteur in C:\Program Files (x86)\EasyPHP-5.3.3\www\liste_publication.php on line 76
    Je n'ai toujours pas trouver ma réponse en naviguant sur plusieurs sites...

    Voici mon code si cela peut vous aidez :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    <?php 
     include('Projet.php');
     include('connexionMysql.php');
     ?>
        <!-- Le corps -->
       <div  id="corps">
     
     
     
    <?php
    echo"
    	  <h1>Publication</h1>
    	   <p>
    Résultat obtenue : ";
     
    $recup_liste_publication = "SELECT * FROM publication";
    $result= mysql_query($recup_liste_publication);
     
     
    echo "<br />";
    echo " <table >";
    // Préparation du tableau d'affichage des résultats.
    echo " <caption> Liste des publications <br /> <br /> </caption>
     <tr>
    		 <th> Id </th>
    		 <th> Titre </th>
    		 <th> Auteur(s) </th>
    		 
    
    		 <th> Commentaire </th> 
    		 <th> Domaine </th>
    		 <th> Télécharger </th>
    		 
      </tr>";
     
    while ($data = mysql_fetch_array($result))  // Parcourt des résultats de la requête SELECT * FROM publication
    { 
    echo " <tr>";
    echo"	     <td> ".$data['id_publi']." </td>";  // Affichage de l'identifiant de la publication
    $id_publi="".$data['id_publi']."";
    echo"		 <td> ".$data['nom_publi']." </td>"; // Affichage du nom de la publication
     
    //Requete de récupération des données auteurs
     
     
    //Premier essai de requete n'ayant pas fonctionner!!!
    		//$recup_id_user= "SELECT id_user, nom, prenom  FROM utilisateur WHERE utilisateur.id_user=liste_publi.id_user AND liste_publi.id_publi=publication.id_publi AND publication.id_publi ='".$id_publi."'  ;";
     
    // J'ai essayer de refaire la requete avec INNER JOIN...
     
    			$recup_id_user= "SELECT id_user, utilisateur.nom, prenom  FROM utilisateur INNER JOIN liste_publi ON utilisateur.id_user=liste_publi.id_user INNER JOIN publication ON liste_publi.id_publi=publication.id_publi WHERE publication.id_publi ='".$id_publi."'  ;";
     
     
    		// Sélectionne les informations des auteurs et les ajoutent dans le tableau sous la forme de auteur1, auteur2...
    		$result2= mysql_query($recup_id_user);
    				$i=0;
    					while ($data2 = mysql_fetch_array($result2)) 
    					{ 
    								// Condition permettant de créer la chaine à afficher dans la case auteur.
    								if($i<1)
    								{
    								$auteur="".$data2['nom']." ".$data2['prenom']."";
    								}
    								else if($i>=1)
    								{
    								$auteur2=$auteur.", ".$data2['nom']." ".$data2['prenom'];
    								$auteur="$auteur2";
    								}
    								else
    								{
    								echo "probleme";
    								}
    								$i++;
    					}
     
    echo"	     <td> ".$auteur." </td>";
    //echo"		 <td> ".$data['nom_equipe']." </td>";
    echo"		 <td> ".$data['commentaire']." </td>";
    echo"		 <td> ".$data['domaine']." </td>";
    $pdf="".$data['chemin']."";
    echo " <td> <a href=download.php?file=".$pdf." > <img src=pdf.gif alt=Télécharger </a> </td>" ;
     
    }
     
    echo"   </tr>";
    echo" </table> ";
    echo " <br />";
     
     
    ?>
    </div>
    Si quelqu'un avait une idée, une piste ou une solution pour mon problème, je le remercie d'avance pour sa réponse!!

  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
    Dans la FAQ :
    http://php.developpez.com/faq/index....ysql_ressource

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if($i<1)
    else if($i>=1)
    else
       {
        echo "probleme";
    }
    A ca c'est sur que si tu es dans le cas "else" tu as un gros problème.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    J'ai déjà consulter cette FAQ et n'ai pas trouver ma réponse...

    Le problème vient apparament de ma deuxieme requete SQL...mais je ne vois pas pourquoi...

    La partie if...else...fonctionne parfaitement déjà tester sur une autre page avec un autre style de requete...(de plus, en la supprimant ici, celà ne résoud pas le problème...)


  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
    Est-ce que tu as fais ce qui etait indiqué dans la FAQ ?

    Pour le if/else je n'ai pas dit qu'il ne fonctionnait pas ; j'ai dit que le cas "else" ne servait a rien.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Ah oki...j'avais pas compris...(c'est ma petit habitude de mettre toujours un else problème...)

    Ah, oui je viens de comprendre ce que tu voulais me montrer en regardant la faq (je rechercher bêtement mon erreur)...
    J'avais oublié le or die pour la sortie des erreurs...

    Donc finalement j'ai :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id_user, utilisateur.nom, prenom FROM utilisateur INNER JOIN liste_publi ON utilisateur.id_user=liste_publi.id_user INNER JOIN publication ON liste_publi.id_publi=publication.id_publi WHERE publication.id_publi ='30' ;

    Champ: 'id_user' dans field list est ambigu

    Donc faut que je corrige ça...une modification de champ suffirais??

    Je pense que je verrais ça demain...car la je dors debout...

    Merci de ton aide^^

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Champ: 'id_user' dans field list est ambigu

    Donc faut que je corrige ça...une modification de champ suffirais??
    Surtout pas malheureux ! Ne va pas toucher à ton modèle de données juste parce que les requêtes passent pas.

    Les alias sont fait pour ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // imaginons une table_a ( id , name, surname)
    // et table_b (id, ville, departement, table_a_id)
    // la requête de selection sur les deux tables est:
    SELECT a.id, a.name, a.surname, b.id, b.ville, b.departement
    FROM table_a AS a JOIN table_b as b ON (a.id=b.table_a_id);
    Plus clair comme ça ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Oui, effectivement c'est plus claire, merci...

    Sinon ma requete marche correctement pour cette partie là...

    Mais en faites, j'ai un truc plus compliqué derrière...et là paf, ca marche pas...

    Alors est ce que la requete est trop lourd, trop complexe....

    J'ai comme requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    $recup_id_user= "SELECT utilisateur.id_user, utilisateur.nom, prenom, equipe.id_equipe, equipe.nom_equipe FROM utilisateur, equipe INNER JOIN liste_publi ON publication.id_publi=liste_publi.id_publi INNER JOIN utilisateur ON liste_publi.id_user=utilisateur.id_user INNER JOIN liste_equipe ON utilisateur.id_user=liste_equipe.id_user INNER JOIN equipe ON liste_equipe.id_equipe=equipe.id_equipe WHERE publication.id_publi ='".$id_publi."' ;";
    ?>

    Et comme message d'erreur :
    Erreur SQL !
    SELECT utilisateur.id_user, utilisateur.nom, prenom, equipe.id_equipe, equipe.nom_equipe FROM utilisateur, equipe INNER JOIN liste_publi ON publication.id_publi=liste_publi.id_publi INNER JOIN utilisateur ON liste_publi.id_user=utilisateur.id_user INNER JOIN liste_equipe ON utilisateur.id_user=liste_equipe.id_user INNER JOIN equipe ON liste_equipe.id_equipe=equipe.id_equipe WHERE publication.id_publi ='31' ;
    Table/alias: 'utilisateur' non unique

    Je comprend pas le fait de utilisateur non unique...J'ai pourtant bien qu'une seul table utilisateur...

    Dois-je faire un distinct??

    Si vous aviez une petite idée a me soumettre, je suis preneur...Je commence a ramé...J'ai également vu que dans certains cas, on pouvait remettre un select dans le from...Est ce qu'il faudrait que je fasse comme çà...enfin je suis un peu perdu...

    En vous remerciant d'avance pour vos réponses!!

  8. #8
    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
    Il faut faire ce que Benjamin t'a indiqué.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Ben j'ai l'impression d'avoir fais comme il a dit...

    JOIN n'est pas le raccourci par défaut d'INNER JOIN?

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Il manque les alias dans ta requete.
    Ils sont necessaires puisque tu nommes plusieurs fois les memes tables.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    D'accord, j'essaie de suite avec les alias!!!

    Je te remercie!!

Discussions similaires

  1. Problème requete sur plusieurs tables
    Par sigmoun dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/01/2009, 00h32
  2. Réponses: 1
    Dernier message: 06/12/2006, 18h25
  3. Probleme de requete sur plusieurs tables
    Par Hitmaaan dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/08/2006, 22h20
  4. [vb6]faire une requete sur plusieurs tables
    Par Henry9 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 23/07/2006, 02h06
  5. requete sur plusieurs tables
    Par manaboko dans le forum Requêtes
    Réponses: 6
    Dernier message: 13/12/2005, 17h07

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