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 SELECT avec un paramètre pour choisir une colonne


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Décembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel

    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Points : 16
    Points
    16
    Par défaut [SQL] Requête SELECT avec un paramètre pour choisir une colonne
    Bonjour,

    J'essaie de faire une requete SELECT sur une table dont le noms des colonne est un paramètre. je ne parviens pas à obtenir une syntaxe correcte. Voici les détails de mon problème. J'espère que vous pourrez me trouver une petite piste pour progresser. Merci !


    Table "series" : id | nom | ... | A | B | C | D | ...

    où A, B, C sont des colonnes correspondantes aux utilisateurs du site. Elles contiennet un simple champ booléen permettant de savoir si l'utilisateur "A" possède l'article "id" ou non, en sachant que plusieurs utilisateurs (A,B,C,..) peuvent l'avoir simultanément.

    Je voudrais faire une requête en sélectionnant les données concernant à mon utilisateur et donc recueillir les infos juste d'une colonne - disons B - et pas toutes les colonnes :

    $parametre = $_SESSION['mon_id']
    $sql = "SELECT id,nom,$parametre FROM series";

    et puis je tente de récupérer les données avec la variable

    $data['$parametre'] (pour obtenir $data['B'] )

    mais sans succès. Ni pour la requête, ni pour la suite...

    Pourriez-vous me conseillez ?

    Merci !

    Stéphane

  2. #2
    jnore
    Invité(e)
    Par défaut
    Salut,

    As tu fait un echo de la variable $sql pour voir si ta requete est bien formatée?

    Fais attention aussi, car certains SGBDR ont besoins de guillemets sur certains champ dès lors qu'ils sont en majuscule. Ce qui fait que j'écrirais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = 'SELECT id,nom,"'.$parametre.'" FROM series';
    ou cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "SELECT id,nom,\"".$parametre."\" FROM series";
    Commence déjà à vérifier ça, après on verra la recupération de ta donnée dans ta variable $data.

  3. #3
    Membre à l'essai
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Décembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel

    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    OKi, merci, je vais essayer cela de suite !

    A tout de suite ... ;-)

  4. #4
    Membre à l'essai
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Décembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel

    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    Voilà, je progresse mais cela ne fonctionne toujours pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sql = "SELECT sid,nom,lettre,".$_SESSION['pid'].",".$_SESSION['amis']." FROM series ORDER BY lettre,nom"; 
    echo("<p>PID=".$_SESSION['pid']." et AMIS=".$_SESSION['amis']." et Requête : ".$sql."</p>");
    ce qui affiche :
    PID=1 et AMIS=2,3 et Requête : SELECT sid,nom,lettre,1,2,3 FROM series ORDER BY lettre,nom

    ce qui est correct. Le problème, c'est de pouvoir accéder aux données dans les colonnes nommées 1, 2 ou 3. Voici le test qui illustre le mieux le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $req = mysql_query($sql) or die('Erreur SQL <br>'.$sql.'<br>'.mysql_error());
    print_r($d = mysql_fetch_assoc($req));
    qui donne :
    Array ( [sid] => 8 [nom] => 421 [lettre] => 4 [1] => 1 [2] => 2 [3] => 3 )

    alors que ma banque de données est pour le moment toujours nulle partout et donc je devrais obtenir :
    ... [1] => 0 [2] => 0 [3] => 0

    mais apparement, la valeur affichée semble prendre le nom de la colonne... :-(

    Si vous pouviez me mettre sur la voie, ce serait vraiment génial... je suppose un problème de guillemets ou quelque chose dans la syntaxe...

    Le but final est de pouvoir utiliser les données de cete manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $d = mysql_fetch_assoc($req);
    $d[$_SESSION['pid']]
    pour accéder aux colonnes.

    Ps : voici mon fichier complet en attach, si besoin. MERCI !
    Fichiers attachés Fichiers attachés

  5. #5
    jnore
    Invité(e)
    Par défaut
    Je pense que tu devrais maintenant filtrer sur les champs en question:

    Tu disais que tes colonnes étaient des champs booléen.
    Donc tu devrais avoir une requete du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    $sql="select...from series WHERE ".$parametre."=true";
    Fais attention, comme apparemment tu as un tableau que tu recupères de ta session, il va certainement falloir casser ce tableau pour filtrer chacun des champs.

  6. #6
    Membre à l'essai
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Décembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel

    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    Merci pour la réponse...

    J'aurais encore une question pour avancer...

    Comment puis-je fair pour faire focntionner une instruction comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $data[$_SESSION['pid']]
    où $_SESSION['pid'] = "B"; par exemple
    de manière à avoir la valeur de $data['B'] au final

  7. #7
    jnore
    Invité(e)
    Par défaut
    Si $data correspond à la variable qui récupère les données d'une requete alors ce que tu as écrit devrait fonctionner.

    ex:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $variable=$_SESSION['pid'];
     
    while($data=mysql_fetch_assoc($req))
        {
        echo $data[$variable];
        }
    là encore fais bien attention que le contenu de $_SESSION['pid'] ne soit pas un array sinon ca ne fonctionnera pas!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/11/2014, 10h57
  2. Réponses: 3
    Dernier message: 04/02/2012, 09h03
  3. Réponses: 7
    Dernier message: 10/09/2008, 15h53
  4. Comment faire pour choisir une colonne d'un dataGrid?
    Par loic20h28 dans le forum Windows Forms
    Réponses: 50
    Dernier message: 06/08/2008, 20h32
  5. Réponses: 3
    Dernier message: 09/06/2008, 09h17

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