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

SQL Procédural MySQL Discussion :

concatener nom de table avec le contenu d'un champ


Sujet :

SQL Procédural MySQL

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Points : 502
    Points
    502
    Par défaut concatener nom de table avec le contenu d'un champ
    Bonjour,

    J'aimerai faire une requette du genre

    select champs1.id, (select count(*) from table_+champs1.id) as nbr_trouve
    from table1

    ce que j'arrive pas à faire c'est de concaténer table_+champs1.id
    Là j'ai mis un + mais biensur çà ne fonctionne pas

    Avez vous une solution ?

    Merci.

  2. #2
    Membre averti Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Points : 332
    Points
    332
    Par défaut
    slt...

    procedure...

    un exemple ...
    http://www.developpez.net/forums/sho...d.php?t=405520

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Points : 502
    Points
    502
    Par défaut
    Alors j'ai essayé çà :
    select @a:=champs1.id, CONCAT("select count(*) from table_",@a) as nbr_trouve
    from table1
    Mais dans le résultat dans la colonne nbr_trouve au lieu d'avoir le résultat de la requette j'ai la requette elle meme ecrite
    enfin au moin c'est bien le résultat de cette requette là qui m'interresse.

    Qu'est ce que j'ai raté ?

  4. #4
    Membre averti Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Points : 332
    Points
    332
    Par défaut
    slt...

    je parlais plus d´un truc comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select @a:=champ1 from table1;
    SET @s = CONCAT("select champ1, (select count(*) from table_",@a," ) as nbr_trouve from table1 ");
     
    PREPARE stmt FROM @s;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    ce code marche, si tu n´as que ne veus que 1 champ de la tabke1 ...
    attention a que la table existe...

    si tu veus plus que un champ.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    BEGIN
    DECLARE done INT DEFAULT 0;
    DECLARE a int;
    DECLARE cur1 CURSOR FOR select @a:=champ1 from table1;
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
       OPEN cur1;
       REPEAT
       FETCH cur1 INTO a;
       IF NOT done THEN
       SET @s = CONCAT("select champ1, (select count(*) from table_",@a," ) as nbr_trouve from table1 ");
        PREPARE stmt FROM @s;
        EXECUTE stmt;
        END IF;
       UNTIL done END REPEAT;
    DEALLOCATE PREPARE stmt;
    END $$
    Pas eu le temps de tester.... je pars manger... mais fais attention: les tables doivent existees

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Points : 502
    Points
    502
    Par défaut
    pas possible de faire çà sans les procédures stockés?

    car j'ai bien la bonne requette qui s'affiche mais j'aimerai avoir son résultat, doit bien y avoir un moyen de faire fonctionner ceci :
    select @a:=champs1.id, CONCAT("select count(*) from table_",@a) as nbr_trouve
    from table1

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Points : 502
    Points
    502
    Par défaut
    Bon bah jvé devoir passé par les procédure stocké.
    J'en ai jamais fait et je comprends pas trop ton exemple là jota5450

    en faite la, ma requette n'était qu'un exemple, moi j'ai bien plusieurs champs à récupéré sur plusieurs table.

  7. #7
    Membre averti Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Points : 332
    Points
    332
    Par défaut
    slt...

    en revoyans le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    BEGIN
    DECLARE done INT DEFAULT 0;
    DECLARE a int;
    DECLARE b int;
    DECLARE cur1 CURSOR FOR SELECT champ1,champ2 FROM table1 ;
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
       OPEN cur1;
       REPEAT
       FETCH cur1 INTO a,b;
       IF NOT done THEN
       SET @s =concat(" select ",a,",  count(*) from table_",a);
        PREPARE stmt FROM @s;
        EXECUTE stmt;
        END IF;
       UNTIL done END REPEAT;
    DEALLOCATE PREPARE stmt;
    END $$
    Ca marche dans ton exemple... maintenant si tu veus plus de champs, vaudra, peutetre passer par une table temporaire...

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

Discussions similaires

  1. [MySQL] Créer un nom de table avec comme nom :email
    Par zesavantfou dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 15/12/2008, 19h03
  2. Réponses: 1
    Dernier message: 31/07/2008, 10h42
  3. selectionner noms des tables avec conditions
    Par Beltegeuse dans le forum Requêtes
    Réponses: 3
    Dernier message: 30/04/2008, 16h09
  4. nom de table avec une variable
    Par zeloutre dans le forum Access
    Réponses: 6
    Dernier message: 06/03/2007, 12h39
  5. Comment je peux changer nom de 'Table' avec la phrase sql
    Par YEK dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/10/2004, 08h38

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