Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/11/2007, 12h02   #1
Membre éprouvé
 
Homme
Inscription : avril 2005
Messages : 611
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Turquie

Informations forums :
Inscription : avril 2005
Messages : 611
Points : 459
Points : 459
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.
maximenet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 12h19   #2
Membre éclairé
 
Avatar de jota5450
 
Jota Alves
Inscription : janvier 2006
Messages : 263
Détails du profil
Informations personnelles :
Nom : Jota Alves
Âge : 36

Informations forums :
Inscription : janvier 2006
Messages : 263
Points : 303
Points : 303
slt...

procedure...

un exemple ...
http://www.developpez.net/forums/sho...d.php?t=405520
jota5450 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 12h37   #3
Membre éprouvé
 
Homme
Inscription : avril 2005
Messages : 611
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Turquie

Informations forums :
Inscription : avril 2005
Messages : 611
Points : 459
Points : 459
Alors j'ai essayé çà :
Citation:
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é ?
maximenet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 13h10   #4
Membre éclairé
 
Avatar de jota5450
 
Jota Alves
Inscription : janvier 2006
Messages : 263
Détails du profil
Informations personnelles :
Nom : Jota Alves
Âge : 36

Informations forums :
Inscription : janvier 2006
Messages : 263
Points : 303
Points : 303
slt...

je parlais plus d´un truc comme ca:
Code :
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 :
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
jota5450 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 13h13   #5
Membre éprouvé
 
Homme
Inscription : avril 2005
Messages : 611
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Turquie

Informations forums :
Inscription : avril 2005
Messages : 611
Points : 459
Points : 459
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 :
Citation:
select @a:=champs1.id, CONCAT("select count(*) from table_",@a) as nbr_trouve
from table1
maximenet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 14h55   #6
Membre éprouvé
 
Homme
Inscription : avril 2005
Messages : 611
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Turquie

Informations forums :
Inscription : avril 2005
Messages : 611
Points : 459
Points : 459
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.
maximenet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 15h35   #7
Membre éclairé
 
Avatar de jota5450
 
Jota Alves
Inscription : janvier 2006
Messages : 263
Détails du profil
Informations personnelles :
Nom : Jota Alves
Âge : 36

Informations forums :
Inscription : janvier 2006
Messages : 263
Points : 303
Points : 303
slt...

en revoyans le code:

Code :
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...
jota5450 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h37.


 
 
 
 
Partenaires

Hébergement Web