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 SQL différente entre MySQL et php [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Par défaut requete SQL différente entre MySQL et php
    Bonjour a tous,

    J'ai 2 tables dans mysql,
    la première comporte une clé primaire "id" dans le seconde table j'ai une clé primaire et une clé étrangère "id". Les 2 "id" étant strictement identique.

    Lorsque je fais ma requête sql via phpadmin le retour de ma selection est tout a fait correcte, par contre lorsque je la fait via php je n'ai qu'un seul enregistrement et je ne comprends pas où se situe le problème

    ma requête est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql="SELECT * FROM salarie INNER JOIN enfants ON 'enfants.idSalarie'='$idSalarie'";
    $idsalarie est obtenu après une recherche dans la table principale

    A partir de la requête je m'en sers pour afficher les données dans un tableau

    Pour le moment, pour voir ce ce que me retourne la reqête j'utilise un print_r

    Merci par avance pour l'aide que vous m'apporterai

    Bonne journée a tous

  2. #2
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    Comme entre double quote, il y a évaluation des variables, tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql="SELECT * FROM salarie INNER JOIN enfants ON enfants.idSalarie=$idSalarie";
    Ensuite, je ne comprends pas trop bien
    Pour le moment, pour voir ce ce que me retourne la reqête j'utilise un print_r
    La requête va te retourner une ressource et non une chaine, tab, structure !

    Comment tu exploites cette requête ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Par défaut
    Citation Envoyé par Fench Voir le message
    Bonjour,

    Comme entre double quote, il y a évaluation des variables, tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql="SELECT * FROM salarie INNER JOIN enfants ON enfants.idSalarie=$idSalarie";
    Ensuite, je ne comprends pas trop bien

    La requête va te retourner une ressource et non une chaine, tab, structure !

    Comment tu exploites cette requête ?
    j'assigne à une variable la fonction mysql_fetch_assoc($sql)

  4. #4
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Citation Envoyé par stefano Voir le message
    j'assigne à une variable la fonction mysql_fetch_assoc($sql)
    Oui c'est Ok, j'avais juste peur qd tu disais
    Pour le moment, pour voir ce ce que me retourne la reqête j'utilise un print_r
    Donc rien à dire

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Par défaut
    Je viens d'essayer les requêtes avec et sans le WHERE

    Avec le WHERE, seul les enregistrements concerner par l'égaliter sont retournés
    Si je prends la version sans le WHERE, c'est l'ensemble des données des 2 table qui me sont retournés

  6. #6
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Oui,

    Si tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT -- les colonnes nécessaires et pas étoile !
    FROM salarie s
    INNER JOIN enfants e ON e.idSalarie = s.idSalarie
    tu auras l'ensemble des deux tables

    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT -- les colonnes nécessaires et pas étoile !
    FROM salarie s
    INNER JOIN enfants e ON e.idSalarie = s.idSalarie
    WHERE s.idSalarie = $idSalarie
    tu auras une restriction à ceux qui correspondent à l'égalité

    MAIS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT -- les colonnes nécessaires et pas étoile !
    FROM salarie s
    INNER JOIN enfants e ON e.idSalarie = $idSalarie
    à tester

    [edit] oui bon la meilleur méthode est la deux désolé à tous
    car pour la mienne je pensais trop Doctrine qui lors d'une jointure prend en considération les liens et donc pas besoin du ON, bon ça coute rien de tester qd même.

  7. #7
    Membre très actif
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Par défaut
    Bonjour,

    la jointure marche plutot comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="SELECT * FROM salarie INNER JOIN enfants ON 'enfants.idSalarie'='salarie.idSalarie' WHERE salarie.idSalarie=$idSalarie";
    J'ai mis 'idSalarie' pour la table Salarie, mais note celle de ta clé primaire. Elle peut être 'id' tout simplement (de même dans la clause WHERE).

  8. #8
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Citation Envoyé par Nowwis Voir le message
    Bonjour,

    la jointure marche plutot comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="SELECT * FROM salarie INNER JOIN enfants ON 'enfants.idSalarie'='salarie.idSalarie' WHERE salarie.idSalarie=$idSalarie";
    J'ai mis 'idSalarie' pour la table Salarie, mais note celle de ta clé primaire. Elle peut être 'id' tout simplement (de même dans la clause WHERE).
    Non, non, non
    Bien qu'il soit possible de faire une jointure interne avec un WHERE , c'est une ancienne syntaxe et aujourd'hui on recommande plutôt d'utiliser JOIN

    La bonne syntaxe serait au final avec les alias et au plus propre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    "SELECT leNomDesChamps
    FROM salarie s
    INNER JOIN enfants e
    ON e.idSalarie = $idSalarie"
    Jamais SELECT * (enfin à éviter)

  9. #9
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Ou plus exactement, la bonne requête serait celle-ci :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT -- les colonnes nécessaires et pas étoile !
    FROM salarie s
    INNER JOIN enfants e ON e.idSalarie = s.idSalarie
    WHERE s.idSalarie = $idSalarie

    Cette requête donnera les infos sur le salarié dont l'identifiant est donné par la variable $idSalarie et sur ses enfants.

    À noter que s'il n'a pas d'enfants, la requête ne retournera pas de résultat.
    Si vous voulez quand même les infos du salarié même s'il n'a pas d'enfants, il faut utiliser une jointure externe.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    @cinephil
    INNER JOIN enfants e ON e.idSalarie = s.idSalarie
    A cause de la variable tu utilises le Where ...

    Je ne suis pas d'accord, le Where, je l'utilise pour ensuite faire une projection de la jointure. Maintenant donnes moi les raisons et je serais d'accord avec toi


    Dans le cas de plusieurs jointures aussi, la dessus je suis d'accord.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Par défaut
    Oula , je pensais pas ouvrir un débat avec ma question

    Quoi qu'il en soit je vais testé ce que vous me dite et je reviens vers vous pour vous donner le résultat

    Dans tous les cas, merci a tous pour votre aide


    Edit : Nickel ça marche à merveille
    Merci encore a tous pour votre aide
    bonne journée

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

Discussions similaires

  1. [MySQL] Résultat de requête SQL différent entre PHP et phpMyAdmin
    Par djsid dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 31/12/2009, 11h22
  2. Réponses: 9
    Dernier message: 26/11/2008, 10h18
  3. [SQL] Protéger les requetes SQL d'injection comme du php, javascript, ect
    Par arnaudperfect dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/06/2007, 15h32
  4. probleme entre mysql et php
    Par jsdar dans le forum Outils
    Réponses: 4
    Dernier message: 02/03/2007, 00h06
  5. [SQL] Recupération Requete SQL dans un tableau dynamique PHP
    Par victor.jbju dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 13/09/2006, 16h48

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