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

Requêtes MySQL Discussion :

Sous requête pour sélectionner certaines colonnes


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 50
    Points : 35
    Points
    35
    Par défaut Sous requête pour sélectionner certaines colonnes
    Bonjour,

    Après quelques recherches, je bute sur une sous requête qui me semblait assez simple, mais finalement pas si simple que ça.

    J'ai deux tables :
    tempinputs :
    +----+-------+-------+-----------+-----------+------------+
    | id | user | code | Nom | rÚfÚrence | StockMeaux |
    +----+-------+-------+-----------+-----------+------------+
    | 1 | meaux | 10707 | aclotine | 99393 | 10 |
    | 2 | meaux | 10703 | aclotine2 | 12234 | 91 |
    +----+-------+-------+-----------+-----------+------------+

    et parametresperso :
    +----+-------+---------------+---------------+------------+
    | id | user | input_num_col | input_nom_col | stat_label |
    +----+-------+---------------+---------------+------------+
    | 1 | meaux | 1 | Code | NULL |
    | 2 | meaux | 2 | Nom | 1 |
    | 3 | meaux | 3 | RÚfÚrence | NULL |
    | 4 | meaux | 4 | StockMeaux | 3 |
    +----+-------+---------------+---------------+------------+

    J'aimerai sélectionner certaines colonnes de "tempinputs" mais pas en dur.

    La requête en dur s'écrirait comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Nom,StockMeaux FROM tempinputs ;
    Mais j'aimerais le faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT (
       SELECT input_nom_col FROM parametresperso WHERE stat_label=1 OR stat_label=3)
    FROM tempinputs;
    Mais ça ne marche pas, il me dit "Subquery returns more than 1 row".

    Et quand j'essaie seulement 1 ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT (
       SELECT input_nom_col FROM parametresperso WHERE stat_label=1)
    FROM tempinputs;
    il me renvoi un truc pas terrible :
    +-----------------------------------------------------------------+
    | (
    SELECT input_nom_col FROM parametresperso WHERE stat_label=1) |
    +-----------------------------------------------------------------+
    | Nom |
    | Nom |
    +-----------------------------------------------------------------+

    Est-ce que vous pouvez m'aider? Est-ce que c'est un problème de structure de ma requête ou de structure de la base?

    Merci

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 50
    Points : 35
    Points
    35
    Par défaut
    Je tourne un peu en rond, mais je vous propose une simplification de l'énoncé du problème.

    Soit une table data, qui est construite comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    +------+--------+---------+------+-------+
    | id   | nom    | prenom  | age  | poids |
    +------+--------+---------+------+-------+
    |    1 | dupond | vincent |   33 |    70 |
    |    2 | dupont | luc     |   31 |    73 |
    |    3 | martin | bob     |   78 |    92 |
    +------+--------+---------+------+-------+
    et une autre table, param, qui est comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    +------+---------+
    | id   | colonne |
    +------+---------+
    |    1 | nom     |
    |    2 | poids   |
    +------+---------+
    En une requête, j'aimerais sélectionner les 'param' (nom et poids) de la table 'data'.

    En théorie, la requête suivante devrait marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT (
       SELECT colonne FROM param )
    FROM data;
    Mais ça ne marche pas, j'ai l'impression que mysql (5.1) n'est pas compatible avec ce genre de sous-requête.

    Tout ça, ça devrait servir à stocker des préférences utilisateur dans une table et d'extraire des données selon ces préférences.

    Or je vais avoir une couche PHP dessus. Je pourrais donc gérer cette requête en deux temps. D'abord récupérer les champs à extraire, puis lancer une deuxième requête.

    A moins que quelqu'un ait une solution.

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Bonjour,

    Dans les 2 exemples que vous donnez, on ne voit pas de lien entre les 2 tables... Du coup, difficile de comprendre ce que vous souhaitez obtenir comme résultat.
    En prenant le 2ème exemple, qu'est supposée sortir la requête entre param et data ? Quel résultat attendez-vous ?

    ced

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 50
    Points : 35
    Points
    35
    Par défaut
    Bonjour,

    Il n'y a pas de lien entre les deux tables. La table param contient la liste des champs à sélectionner de la table data.

    Le résultat souhaité est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    +--------+-------+
    | nom    | poids |
    +--------+-------+
    | dupond |    70 |
    | dupont |    73 |
    | martin |    92 |
    +--------+-------+
    Bien sûr, une solution consisterait à faire l'opération directement en PHP, mais j'aimerais trouver une façon plus esthétique.

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Pour obtenir le résultat que vous souhaitez, pas besoin de la table param :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT nom, poids
    FROM data
    ced

Discussions similaires

  1. Pb de sous-requête pour une mise à jour
    Par Balthos dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 05/03/2008, 09h13
  2. Requête pour fusionner deux colonnes
    Par david71 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 04/12/2007, 20h44
  3. requête pour "effacer" certaines valeurs ?
    Par kikidrome dans le forum Requêtes et SQL.
    Réponses: 24
    Dernier message: 27/02/2007, 16h35
  4. Réponses: 2
    Dernier message: 01/12/2006, 10h09
  5. requête pour ajouter données à colonne
    Par sarah67 dans le forum Access
    Réponses: 12
    Dernier message: 21/02/2006, 11h48

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