2009-04-06 7 views
2

Je sais comment une conduite de requête MySQL dans un autre:choisir une colonne dans Dynamiquement MySQL

SELECT user_name FROM users WHERE user_id=(SELECT user_id FROM entries WHERE header="foo"); 

Par curiosité intellectuelle pur, comment je choisis de façon dynamique une colonne ou une table?

Ex:

SELECT ( 
    SELECT column_name FROM column_names WHERE id = 1 
) FROM ( 
    SELECT table_name FROM table_names WHERE id = 1 
); 
+0

Pourriez-vous donner un exemple avec des exemples de données? Je ne peux pas comprendre quel résultat vous attendez. – Quassnoi

Répondre

6

utiliser une instruction préparée:

 
mysql> SET @sql = CONCAT("SELECT ", (SELECT "NOW()")); 
Query OK, 0 rows affected (0.00 sec) 

mysql> SELECT @sql; 
+--------------+ 
| @sql   | 
+--------------+ 
| SELECT NOW() | 
+--------------+ 
1 row in set (0.00 sec) 

mysql> PREPARE stmt FROM @sql; 
Query OK, 0 rows affected (0.00 sec) 
Statement prepared 

mysql> EXECUTE stmt; 
+---------------------+ 
| NOW()    | 
+---------------------+ 
| 2009-04-06 23:08:31 | 
+---------------------+ 
1 row in set (0.00 sec) 
+0

Je ne le savais pas! Doux. – tpdi

+0

Excellent, merci beaucoup. – cwallenpoole

1

Je suis assez sûr que cela est impossible avec une requête régulière ou vue.

0

Vous pouvez le faire en interrogeant la table information_schema.columns.

Pour ce faire, vérifiez les résultats. Je ne suis pas sûr de ce que vous essayez de faire, mais cette table contient tout ce qui concerne vos colonnes:

SELECT * FROM information_schema.`COLUMNS` C; 

BTW, je ne sais pas moyen de le faire en une seule requête. Vous devriez obtenir les informations sur les colonnes, puis créer une nouvelle requête dans votre langage de codage, quel qu'il soit.

1

En réponse à votre première question, vous devriez en apprendre davantage sur la façon de faire JOIN dans SQL. Une jointure est une opération fondamentale dans le langage SQL. Il est aussi important de comprendre comment faire une boucle dans d'autres langues. En ce qui concerne votre deuxième question, non, vous ne pouvez pas rendre dynamiques les noms de tables ou de colonnes dans une seule instruction. Toutefois, vous pouvez écrire du code dans votre application pour créer une instruction SQL sous forme de chaîne, en recherchant les noms de colonnes et de tables. Ensuite, exécutez la chaîne résultante en tant que nouvelle requête SQL.

+0

Je savais comment faire cela en PHP, mais j'ai vu que, souvent, PHP est beaucoup moins efficace et beaucoup plus lent - surtout si plusieurs appels à une base de données sont nécessaires. – cwallenpoole

Questions connexes