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 :

[SQL] Requête complexe: syntaxe


Sujet :

PHP & Base de données

  1. #1
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut [SQL] Requête complexe: syntaxe
    Bonjour,

    voilà je développe un jeu en php et mes connaissance en sql sont limitées.

    Je voudrais donc faire une requête, je suppose de type JOIN UNION.

    En fait j'ai deux tables:

    EQUIPEMENT (id, nom)
    USER_EQUIP (id_joueur, id_arme, type_arme)

    alors dans la table equipement, la colum id correspond à id_arme dans la table user_equip.

    Moi je voudrais réccuperer le nom des armes stockées dans "equipement" pour chaque id d'arme stockée dans la table user_equipe, et celà pour un seul id de joueur, toujours de cette table user_equip.

    Et je sais vraiment pas comment faire.

    J'espère avoir été intéligible.

    Merci d'avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 114
    Points : 102
    Points
    102
    Par défaut
    SELECT EQUIPEMENT.NOM from EQUIPEMENT, USER_EQUIP
    WHERE EQUIPEMENT.id = USER_EQUIP.id_arme


    je n'ai jamais fais de MySQL donc je te donne une syntaxe non normalisé (je vais me faire tapper sur les doigts) mais qui toutefois devrai fonctionner

  3. #3
    Membre du Club Avatar de liza83
    Profil pro
    Étudiant
    Inscrit en
    Mai 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2004
    Messages : 52
    Points : 63
    Points
    63
    Par défaut
    [QUOTE=Pahcixam]
    Moi je voudrais réccuperer le nom des armes stockées dans "equipement" pour chaque id d'arme stockée dans la table user_equipe, et celà pour un seul id de joueur, toujours de cette table user_equip.
    QUOTE]

    petite précision : passes tu en paramètre l'id du joueur ?

    Si c'est la cas tu peux faire une requète telle que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT EQUIPEMENT.NOM,  USER_EQUIP.ID_JOUEUR
    FROM EQUIPEMENT
     INNER JOIN USER_EQUIP
      ON EQUIPEMENT.ID= USER_EQUIP.ID_ARME
    WHERE USER_EQUIP.ID_JOUEUR = 'parametre' ;

  4. #4
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Effectivement je passe en paramètre l'id du joueur. Je vais essayé la requête et je vous tient au courant car je n'ai pas tout à fait finit le script.

  5. #5
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Bon j'ai testé avec cette requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql = 'SELECT EQUIPEMENT.NOM, USER_EQUIP.ID_JOUEUR FROM 
    EQUIPEMENT INNER JOIN USER_EQUIP ON EQUIPEMENT.ID= 
    USER_EQUIP.ID_ARME WHERE USER_EQUIP.ID_JOUEUR 
    ="'.$_SESSION['id'].'"';
    Je n'ai aucune erreur seulement, cette requête ne me retourne rien, seulement un array vide.

    Pourtant dans ma table equipement j'ai une arme avec l'id 1, et dans la table d'equipement du joueur j'ai une arme de type id 1, donc il devrait me retourné le nom de cette dernière qui est stockée dans EQUIPEMENT non ?

    Je sais pas trop comment y expliquer. En tout cas merci de m'avoir répondu, mais là je sais pas trop quoi faire.

  6. #6
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    L'erreur vient peut-être de moi alors,

    je sais bien qu'ici c'est sql mais voilà, je traitre ma requête comme ceci et j'obtient cette Notice:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Thu Aug 24 11:57:31 2006] [error] [client 127.0.0.1] PHP Notice:  Undefined index:  EQUIPEMENT.NOM in C:\\www\\medievalheros\\beta2\\equipement.php on line 24, referer: http://127.0.0.1/beta2/play.php?page=equipement
    Et voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	$sql = 'SELECT EQUIPEMENT.NOM from EQUIPEMENT, USER_EQUIP
    	WHERE EQUIPEMENT.id = USER_EQUIP.id_arme';
        $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    	$data = mysql_fetch_array($req);
     
    	echo 'nom :'.$data['EQUIPEMENT.NOM'];
    Comment je fait pour réccuperer le nom dans une requête comme celle-ci ? Et ceci dans les deux requêtes.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 114
    Points : 102
    Points
    102
    Par défaut
    n'ayant jamais fais de php, j ai du mal a comprendre.

    Toutefois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql = 'SELECT EQUIPEMENT.NOM, USER_EQUIP.ID_JOUEUR FROM 
    EQUIPEMENT INNER JOIN USER_EQUIP ON EQUIPEMENT.ID= 
    USER_EQUIP.ID_ARME WHERE USER_EQUIP.ID_JOUEUR 
    ="'.$_SESSION['id'].'"';
    le session[] c'est un tableau ?

    si oui alors tu ne peux pas faire comme ca.

    Il faut executer ta requete autant de fois que tu a de joueur dans ton tableau.

    Si ca n'est pas un tableau mais juste un identifiant, colle ta requete telle qu'elle est exécutée stp

  8. #8
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Non, en fait c'est juste des paramètre extraits d'une BDD est stocké dans un fichier de sessions. Dans le cas de ma requête, l'id est un chiffre.

    Voici la requête telle qu'elle est exécutée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT EQUIPEMENT.NOM, USER_EQUIP.ID_JOUEUR FROM EQUIPEMENT
     INNER JOIN USER_EQUIP ON EQUIPEMENT.ID= USER_EQUIP.ID_ARME WHERE 
    USER_EQUIP.ID_JOUEUR ="1"

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 114
    Points : 102
    Points
    102
    Par défaut
    1 est un entier et non une chaine, donc il ne faut pas mettre de guillemet

  10. #10
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    J'ai fait la modif, mais je n'ai toujours pas de résultat affiché car ça me retourne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Thu Aug 24 16:41:14 2006] [error] [client 127.0.0.1] PHP Notice:  Undefined index:  EQUIPEMENT.NOM in C:\\www\\medievalheros\\beta2\\equipement.php on line 17, referer: http://127.0.0.1/beta2/play.php

    et si je remplace par nom tout cours c'est pareil, que dois-je mettre ?

  11. #11
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Utilise print_r(ton_array) pour débugger quand tu travailles avec des arrays sous php. Ca fait longtemps que j'ai pas touché à php mais je suis sûr que ton erreur vient du fait quand l'array il n'y pas la clé que tu mentionnes dans ton echo.

  12. #12
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Donc voilà j'ai fait ce que tu m'a dit et les réponse que j'attende sont belle et bien là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [0] => Dague courte [NOM] => Dague courte [1] => 1 [ID_JOUEUR] => 1 )
    Alors pourquoi il me l'affiche pas quand je fait echo $data['nom']; ????

  13. #13
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Bon je retire ce que je viens de dire, ça marcje maintenant. Allez savoir ce qui allait pas ...

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

Discussions similaires

  1. [Linq to SQL] requête complexe faites chauffer vos méninges ;)
    Par anthyme dans le forum Accès aux données
    Réponses: 5
    Dernier message: 06/06/2008, 10h52
  2. SQL: Requête Complexe
    Par SQLPlus dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/05/2008, 00h24
  3. [SQL] Requête complexe sur plusieurs tables
    Par BFH dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/09/2007, 17h21
  4. [SQL Oracle] Requête complexe
    Par lapartdombre dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/11/2005, 15h31
  5. [SQL] Requête complexe avec appel multiple à la même table
    Par Julien Dufour dans le forum Langage SQL
    Réponses: 9
    Dernier message: 14/04/2005, 15h12

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