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 :

jointure de 4 tables mysql [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 57
    Points : 19
    Points
    19
    Par défaut jointure de 4 tables mysql
    Bonjour a tous,
    avant de me lancer trop loin, j'aurais aimé avoir des renseignement sur vos techniques de jointure de table...

    j'ai quattre tables de ce type :

    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
    table contrat
    Champ  	Type   	         Null  	Défaut
    id  	    int(11) 	     Non  	  	 
    pid  	    int(11)         Non  	  	 
    contrat   varchar(80) 	Non  	  	 
    emploie  varchar(80)   Non  
    
    table CV
    Champ  	Type   	Null  	Défaut
    id  	int(11) 	Non  	  	 
    titre  	varchar(80) 	Non  	  	 
    nom  	varchar(80) 	Non  	  	 
    prenom  	varchar(80) 	Non  	  	 
    email  	varchar(80) 	Non  	  	 
    adresse1  	varchar(255) 	Non  	  	 
    adresse2  	varchar(80) 	Non  	  	 
    codeP  	varchar(80) 	Non  	  	 
    ville  	varchar(80) 	Non  	  	 
    pays  	varchar(80) 	Non  	  	 
    fichier  	varchar(80) 	Non  	  	 
    timestamp  	bigint(20) 	Non  	  	 
    
    table experience
    Champ  	Type   	Null  	Défaut
    id  	int(11) 	Non  	  	 
    pid  	int(11) 	Non  	  	 
    titre  	varchar(80) 	Non  	  	 
    aucune  	tinyint(1) 	Non  	  	 
    nomentreprise  	varchar(80) 	Non  	  	 
    ville  	varchar(80) 	Non  	  	 
    province  	varchar(255) 	Non  	  	 
    pays  	varchar(80) 	Non  	  	 
    intitulé  	varchar(255) 	Non  	  	 
    description  	text 	Non  	  	 
    dateD  	bigint(20) 	Non  	  	 
    dateF  	bigint(20) 	Non  	  	 
    
    table formation
    
     id   	int(11)   	Non   	    	 
    pid  	int(11) 	Non  	  	 
    niveau  	varchar(80) 	Non  	  	 
    intitule  	varchar(80) 	Non  	  	 
    ecole  	varchar(80) 	Non  	  	 
    ville  	varchar(80) 	Non  	  	 
    province  	varchar(255) 	Non  	  	 
    pays  	varchar(80) 	Non  	  	 
    information  	text 	Non  	  	 
    dateD  	bigint(20) 	Non  	  	 
    dateF  	bigint(20) 	Non

    j'aurais aimé pouvoir les joindre en fonction de l'id de la table CV ..

    j'ai pensé à ça ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $retour = mysql_query('SELECT  *  FROM CV LEFT JOIN experience ON pid.experience = CV.id LEFT JOIN formation ON pid.formation = CV.id LEFT JOIN contrat ON pid.contrat = CV.id WHERE CV.id = 1');

  2. #2
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 44
    Points : 47
    Points
    47
    Par défaut
    Salut

    A première vue ça doit fonctionner.

    Mais attention, avec les LEFT JOIN tu vas récupérer des lignes de CV qui n'ont pas forcément de correspondance avec les autres tables.
    Si tu veux cette correpondance, tu dois utiliser un INNER JOIN, ou une jointure à la oracle-style.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 57
    Points : 19
    Points
    19
    Par défaut
    on peut faire des jointure à la oracle? ça me tente moi ^^

    je test avec inner dès que j'ai finis de coder autre choses ^^

    merci

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 57
    Points : 19
    Points
    19
    Par défaut
    donc voilà

    je test le tout avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $retour = mysql_query('SELECT  *  FROM CV INNER JOIN experience ON pid.experience = CV.id INNER JOIN formation ON pid.formation = CV.id INNER JOIN contrat ON pid.contrat = CV.id WHERE CV.id = 1'); 
    $donnees = mysql_fetch_array($retour);
     
    echo $donnees['CV.id']; echo $donnees['experience.titre'];
    et il me mets l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/chm2/www/test/administration/test.php on line 12
    si vosu avez une idée

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 57
    Points : 19
    Points
    19
    Par défaut
    en supprimmant le mysql_fecth_array, plus d'erreur mais strictement rien d'afficher...

  6. #6
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 44
    Points : 47
    Points
    47
    Par défaut
    tu devrais d'abord mettre au point tes requêtes directement sur ta DB avant de les inclure dans ton code php...

  7. #7
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Le mieux si tu n'as pas besoin de tous tes champs est d'éviter le select *.
    Si tu le peux mets juste les champs dont tu as besoin déjà genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $retour = mysql_query('SELECT  CV.id as id, experience.titre as titre  FROM CV INNER JOIN experience ON pid.experience = CV.id INNER JOIN formation ON pid.formation = CV.id INNER JOIN contrat ON pid.contrat = CV.id WHERE CV.id = 1');
    Ensuite utilise OR die(mysql_error()) à la fin de ta requête voir si elle te ramène une erreur ou pas.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 57
    Points : 19
    Points
    19
    Par défaut
    le tout est que j'ai besoin de tout les titres,....

    le OR die(mysql_error())
    me permet de voir l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected T_VARIABLE in /home/chm2/www/test/administration/test.php on line 12
    ligne 12 =
    je vois pas trop...

  9. #9
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    tu pourrais mettre un peu plus de code?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 57
    Points : 19
    Points
    19
    Par défaut
    si je fais dans mysql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT  *  FROM cv INNER JOIN experience ON pid.experience = cv.id INNER JOIN formation ON pid.formation = cv.id INNER JOIN contrat ON pid.contrat = cv.id WHERE cv.id = 1
    j'ai l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1054 - Unknown column 'pid.experience' in 'on clause'

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 57
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par jbrasselet
    tu pourrais mettre un peu plus de code?

    voilà tout le code ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $retour = mysql_query('SELECT  *  FROM cv LEFT JOIN experience ON pid.experience = cv.id LEFT JOIN formation ON pid.formation = cv.id LEFT JOIN contrat ON pid.contrat = cv.id WHERE cv.id = 1')OR die(mysql_error())
    $donnees = $retour;
     
    echo $donnees['CV.id']; echo $donnees['experience.titre'];

  12. #12
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par acppca
    le OR die(mysql_error())
    me permet de voir l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected T_VARIABLE in /home/chm2/www/test/administration/test.php on line 12
    Euh non. Parse error est une erreur de php, qui signifie en général qu'il manque (ou qu'il y a en trop) une parenthèse, une accolade, une quote ou un point-virgule. Verifie que la ligne précédente est correcte.

    Ne devrais-tu pas remplacer pid.experience par experience.pid ? La syntaxe est nom_table.nom_champ.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  13. #13
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Ta ligne 12 doit être normalement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $donnees= @mysql_fetch_array($retour);
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 57
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Celira
    Euh non. Parse error est une erreur de php, qui signifie en général qu'il manque (ou qu'il y a en trop) une parenthèse, une accolade, une quote ou un point-virgule. Verifie que la ligne précédente est correcte.

    Ne devrais-tu pas remplacer pid.experience par experience.pid ? La syntaxe est nom_table.nom_champ.
    pour la deuxi!me si, merci, je suis vraiment à la masse moi en été...

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 57
    Points : 19
    Points
    19
    Par défaut
    Pour faire simple je propose qu'on fasse le point sur toute vos solutions puis pour les prochains qui on le même problémes ça aidera :

    nous avons la requete mysql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT  *  FROM cv LEFT JOIN experience ON experience.pid = cv.id LEFT JOIN formation ON formation.pid = cv.id LEFT JOIN contrat ON contrat.pid = cv.id WHERE cv.id = 1
    le code php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $retour = mysql_query('SELECT  *  FROM cv LEFT JOIN experience ON experience.pid = cv.id LEFT JOIN formation ON formation.pid = cv.id LEFT JOIN contrat ON contrat.pid = cv.id WHERE cv.id = 1')OR die(mysql_error());
    $donnees = mysql_fetch_array($retour);
     
    echo $donnees['CV.id']; echo $donnees['experience.titre'];
    Seul chose qui ne vas toujours pas c'est qu'il ne m'affiche rien, même les erreur mysql...

  16. #16
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    A mon avis il manque un espace avant le OR déjà

    Ensuite question stupide : tu as bien ouvert une connexion à tabase de données???
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 57
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par jbrasselet
    A mon avis il manque un espace avant le OR déjà

    Ensuite question stupide : tu as bien ouvert une connexion à tabase de données???
    je sais que j'ai l'air d'un con mais oui, j'ai un connexion_DB('BASE_TEST'); qui traine sur le haut de page ^

  18. #18
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Tu as ajouté l'espace avant le OR voir s'il ne te met toujours pas d'erreur?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 57
    Points : 19
    Points
    19
    Par défaut
    bel et bien ajouter et aucune erreur...

    je penses que ça viendrais de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $donnees['CV.id']; echo $donnees['experience.titre'];
    mais je vois pas pourquoi ^

  20. #20
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Je suis en train de me demander s'il connait le CV. ou experience.

    Et comme j'ai pas de quoi tester sous la main.

    Essaye de mettre une requête sans join, juste une table et d'afficher un champ voir si ça fonctionne.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] Jointure tables MySQL
    Par asvin dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/10/2008, 21h21
  2. Jointure entre 2 tables MySQL (Suite)
    Par johnkro dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/07/2006, 14h14
  3. Jointure entre 2 tables MySQL
    Par johnkro dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/07/2006, 14h52
  4. jointure entre deux tables mysql
    Par Invité dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 23/04/2006, 20h08
  5. [MySQL] Jointure sur une table déjà jointe
    Par genova dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/10/2005, 23h54

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