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 :

probleme dans une requete


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    informatique de gestion
    Inscrit en
    Janvier 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : informatique de gestion

    Informations forums :
    Inscription : Janvier 2013
    Messages : 94
    Points : 44
    Points
    44
    Par défaut probleme dans une requete
    bonjour,

    voici j'ai un petit probleme avec mon code, il n affiche pas ce que je veux afficher

    je voudrais afficher tout les pays qui sont dans l'organe que je selectionne mais il m affiche tout les pays malheureusement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT DISTINCT COUNTRY_NAME_EN FROM COUNTRY, ROLE WHERE ROLE_BODY_ID_FK ='.$tmp2.' ORDER BY COUNTRY_NAME_EN';
    $tmp2 = 3949(l id d'un body)

    c est certainement une erreur de logique mais est ce quelqu un peu m aider SVP voici en annexe mes tables

    Nom : bodytab.png
Affichages : 173
Taille : 22,8 KoNom : functiontab.png
Affichages : 137
Taille : 11,6 KoNom : membertab.png
Affichages : 138
Taille : 22,5 Ko
    Nom : bodytab.png
Affichages : 173
Taille : 22,8 KoNom : roletab.png
Affichages : 134
Taille : 16,9 Ko


    et mon but c est d avoir juste en tete les noms des pays(qui sont pas en shadow mais avec un hover on les voit )

    l image ici est le tableau de (budgets (member_ID :3949))

    Nom : montreru.png
Affichages : 140
Taille : 27,5 Ko

  2. #2
    Invité
    Invité(e)
    Par défaut
    A toi de connaitre les relations entre les différentes tables...

  3. #3
    Membre du Club
    Homme Profil pro
    informatique de gestion
    Inscrit en
    Janvier 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : informatique de gestion

    Informations forums :
    Inscription : Janvier 2013
    Messages : 94
    Points : 44
    Points
    44
    Par défaut
    et bien la est le soucis je connais mais dans ma logique que je veux

    je prend le nom du pays tant que ROLE_BODY_ID_FK ='.$tmp2.'

    mais c est un probleme de logique la car il me trie pas comme il faut et je veux commencer par l entete des noms de pays obligatoirement

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Points : 342
    Points
    342
    Par défaut
    Bonjour. Il est logique que la requête renvoie tous les pays, vous avez faits un produit cartésien et non une jointure.
    Le code correct est, je crois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DISTINCT
            COUNTRY_NAME_EN
    FROM
            COUNTRY NATURAL INNER JOIN ROLE
    WHERE
            ROLE_BODY_ID_FK = ?
    ORDER BY
            COUNTRY_NAME_EN
    PS : pensez à utiliser une requête preparée. C'est moi quand vous devez exécuter plusieurs fois une même requête avec des paramètres différents.

  5. #5
    Membre du Club
    Homme Profil pro
    informatique de gestion
    Inscrit en
    Janvier 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : informatique de gestion

    Informations forums :
    Inscription : Janvier 2013
    Messages : 94
    Points : 44
    Points
    44
    Par défaut
    merci pour ta reponse mais j ai un soucis clé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT DISTINCT COUNTRY_NAME_EN FROM COUNTRY NATURAL INNER JOIN ROLE WHERE ROLE_BODY_ID_FK ='.$tmp2.' ORDER BY COUNTRY_NAME_EN';
    Warning: oci_execute(): ORA-00905: missing keyword in R:\wamp\www\Projet\Bodies.php on line 10

    et je ne sais pas d ou vient le probleme

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Points : 342
    Points
    342
    Par défaut
    EDIT : quelle version d'Oracle utilisez-vous ?
    Après une petite recherche sur l'erreur ORA-00905, j'ai appris que cette erreur est reliée à la clause NATURAL INNER JOIN...
    Essayez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DISTINCT
            COUNTRY_NAME_EN
    FROM
            COUNTRY INNER JOIN ROLE USING(<Nom de(s) colonne(s) commune(s) aux deux tables>)
    WHERE
            ROLE_BODY_ID_FK = ?
    ORDER BY
            COUNTRY_NAME_EN

  7. #7
    Membre du Club
    Homme Profil pro
    informatique de gestion
    Inscrit en
    Janvier 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : informatique de gestion

    Informations forums :
    Inscription : Janvier 2013
    Messages : 94
    Points : 44
    Points
    44
    Par défaut
    je l ai donc enlever le natural mais j ai gardé je inner joint et j ai toujours la meme erreur


    ------------------------modification--------------

    j'ai remis en majuscule et la requete fonctionne maintenant mais le soucis c est que j ai le meme resultat que sur ma requete precedente ...

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Points : 342
    Points
    342
    Par défaut
    OK. Je reviens au problème à résoudre. Vous voulez que pour chaque organe, on ait la liste des pays. Est-ce q'un pays peut être membre de plusieurs organes?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1/ quand on t'écrit un code SQL sur plusieurs lignes, comme esired l'a fait, ce n'est pas juste pour faire "joli".
    • C'est surtout plus lisible, et donc facile à déboguer.
    • Et ça ne gêne en rien l'exécution du code.

    Donc, fais en sorte de le ré-écrire de cette façon.

    2/ comme je te l'ai déjà montré dans un autre post, une JOINTURE "propre" s'écrit de cette manière :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FROM `COUNTRY` C
    INNER JOIN `ROLE` R
     ON C.xxxxxxx = R.yyyyyyy
    • C et R remplace les noms des tables (alias)
    • C.xxxxxxx et R.yyyyyyy sont les champs qui relient les 2 tables


    N.B. Et pense à mettre les `...`, car certains de tes noms de tables sont des mots réservés.
    Dernière modification par Invité ; 08/10/2015 à 15h34.

  10. #10
    Membre du Club
    Homme Profil pro
    informatique de gestion
    Inscrit en
    Janvier 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : informatique de gestion

    Informations forums :
    Inscription : Janvier 2013
    Messages : 94
    Points : 44
    Points
    44
    Par défaut
    oui bien sur mais je vais etre plus explicite pour les organes j ai tout les organes que j ai mis dans une div + scroolbar

    Nom : listebodies.png
Affichages : 117
Taille : 20,8 Ko

    a chaque fois que je vais clicker un organes en questions je vais recuperer sa ID avec un $_GET

    il y a effectivement plusieurs pays qui peut etre dans plusieurs organes mais la n est pas la questions a ce poser je pense mais comment mettre les bons pays au bons organes

  11. #11
    Invité
    Invité(e)
    Par défaut
    Au fait, à quoi ressemble la table `COUNTRY` ??

  12. #12
    Membre du Club
    Homme Profil pro
    informatique de gestion
    Inscrit en
    Janvier 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : informatique de gestion

    Informations forums :
    Inscription : Janvier 2013
    Messages : 94
    Points : 44
    Points
    44
    Par défaut
    oups oublié de la mettre apparemment la voici

    Nom : countrytab.png
Affichages : 115
Taille : 15,0 Ko

  13. #13
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Points : 342
    Points
    342
    Par défaut
    Donc si je comprends, si on sélectionne un organe, on obtient la liste des organes. Mais j'ai beau regarder les diiférentes tables affichées, je ne vois aucune relation entre les tables "Body" et "Country". Pas de colonne commune, pas de table faisant le lien entre les deux...

  14. #14
    Membre du Club
    Homme Profil pro
    informatique de gestion
    Inscrit en
    Janvier 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : informatique de gestion

    Informations forums :
    Inscription : Janvier 2013
    Messages : 94
    Points : 44
    Points
    44
    Par défaut
    on selectionne l organe qui est dans la liste et on a se tableau

    Nom : tabbeheh.png
Affichages : 106
Taille : 59,9 Ko

    le seul lien que j ai c est avec member_Nation_Country_id_fk dans la table MEMBER

  15. #15
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Points : 342
    Points
    342
    Par défaut
    OK, c'est un peu plus clair pour moi.
    Dernière question : vous voulez afficher le pays du membre ou obtenir les pays d'origine des membres de l'organe ?
    Désolé pour toutes ces questions ; je comprends vite mais il faut m'expliquer longtemps.

  16. #16
    Membre du Club
    Homme Profil pro
    informatique de gestion
    Inscrit en
    Janvier 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : informatique de gestion

    Informations forums :
    Inscription : Janvier 2013
    Messages : 94
    Points : 44
    Points
    44
    Par défaut
    chaque pays a un ou plusieurs membres dans l organe est question (ici c est l organe "budgets") et je veux prendre tout les pays qui ont au moins un membre dans l organe voici les photo

    Nom : france.png
Affichages : 108
Taille : 74,2 Ko

    Nom : germany.png
Affichages : 111
Taille : 59,1 Ko

  17. #17
    Invité
    Invité(e)
    Par défaut
    EUREKA !

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FROM `COUNTRY` C
    INNER JOIN `MEMBER` M
      ON C.COUNTRY_ID = M.MEMBER_NATION_COUNTRY_ID
    INNER JOIN `ROLE` R
     ON M.MEMBER_ID = R.ROLE_MEMBER_ID_FK




    N.B. Inutile de nous mettre des copies d'écran des contenus des tables ou autres : SEULE LA STRUCTURE des tables nous intéresse (et donne les infos nécessaires et suffisantes).

  18. #18
    Membre du Club
    Homme Profil pro
    informatique de gestion
    Inscrit en
    Janvier 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : informatique de gestion

    Informations forums :
    Inscription : Janvier 2013
    Messages : 94
    Points : 44
    Points
    44
    Par défaut
    reste toujours un soucis malheureusement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     $sql = 'SELECT DISTINCT COUNTRY_NAME_EN FROM `COUNTRY` C
    				INNER JOIN `MEMBER` M
    					ON C.COUNTRY_ID = M.MEMBER_NATION_COUNTRY_ID
    				INNER JOIN `ROLE` R
    					ON M.MEMBER_ID = R.ROLE_MEMBER_ID_FK
    				WHERE R.ROLE_BODY_ID_FK ='.$tmp2.' ORDER BY C.COUNTRY_NAME_EN';
    Warning: oci_execute(): ORA-00911: invalid character in R:\wamp\www\Projet\Bodies.php on line 18

    probleme de caractere invalide

    et quand j'enleve les " `` " des tables j ai cette erreurs

    ( ! ) Warning: oci_execute(): ORA-00904: &quot;M&quot;.&quot;MEMBER_NATION_COUNTRY_ID&quot;: invalid identifier in R:\wamp\www\Projet\Bodies.php on line 18

  19. #19
    Invité
    Invité(e)
    Par défaut
    Je ne vois pas d'erreur...

    Essaie en remplaçant les alias :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = 'SELECT DISTINCT COUNTRY_NAME_EN 
    	FROM `COUNTRY` CC 
    	INNER JOIN `MEMBER` MM 
    		ON CC.COUNTRY_ID = MM.MEMBER_NATION_COUNTRY_ID 
    	INNER JOIN `ROLE` RR 
    		ON MM.MEMBER_ID = RR.ROLE_MEMBER_ID_FK 
    	WHERE RR.ROLE_BODY_ID_FK = '.$tmp2.' 
    	ORDER BY CC.COUNTRY_NAME_EN';

  20. #20
    Membre du Club
    Homme Profil pro
    informatique de gestion
    Inscrit en
    Janvier 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : informatique de gestion

    Informations forums :
    Inscription : Janvier 2013
    Messages : 94
    Points : 44
    Points
    44
    Par défaut
    trouver

    il y avait un manque d information

    CC.COUNTRY_ID = MM.MEMBER_NATION_COUNTRY_ID

    cetait cela

    CC.COUNTRY_ID = MM.MEMBER_NATION_COUNTRY_ID_FK

    merci a vous tout fonctionne comme sur des roulette maintenant

    1000 merci

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

Discussions similaires

  1. probleme dans une requete mysql
    Par mohamed11000 dans le forum Requêtes
    Réponses: 6
    Dernier message: 26/04/2013, 17h34
  2. [Requête] Problème dans une requête analyse croisée
    Par drthodt dans le forum Requêtes et SQL.
    Réponses: 20
    Dernier message: 29/09/2006, 10h27
  3. [XPath] Probleme dans une requete XPath
    Par kalmless21 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 03/07/2006, 22h22
  4. probleme dans une requete de suppression
    Par iam dans le forum Bases de données
    Réponses: 3
    Dernier message: 03/07/2006, 11h11

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