在MySQL中动态选择列

在MySQL中动态选择列,mysql,Mysql,我知道如何将一个MySQL查询导入另一个MySQL查询: SELECT user_name FROM users WHERE user_id=( SELECT user_id FROM entries WHERE header="foo" ); 出于纯粹的智力好奇心,我如何动态地选择列或表 例: 我敢肯定,这在常规查询或视图中是不可能的。您可以通过查询information\u schema.columns表来实现 执行此操作并检查结果。我不确定您想做什么,但该表包含与您的列相关的任何内容:

我知道如何将一个MySQL查询导入另一个MySQL查询:

SELECT user_name FROM users WHERE user_id=( SELECT user_id FROM entries WHERE header="foo" );
出于纯粹的智力好奇心,我如何动态地选择列或表

例:


我敢肯定,这在常规查询或视图中是不可能的。

您可以通过查询information\u schema.columns表来实现

执行此操作并检查结果。我不确定您想做什么,但该表包含与您的列相关的任何内容:

SELECT * FROM information_schema.`COLUMNS` C;

顺便说一句,我不知道如何在一个查询中实现这一点。您应该获取列信息,然后用您的编码语言创建一个新的查询,不管是什么。

使用准备好的语句:

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) mysql>SET@sql=CONCAT(“选择”,选择“现在()”); 查询正常,0行受影响(0.00秒) mysql>选择@sql; +--------------+ |@sql| +--------------+ |现在选择() +--------------+ 一行一组(0.00秒) mysql>从@sql准备stmt; 查询正常,0行受影响(0.00秒) 编写的声明 mysql>执行stmt; +---------------------+ |现在()| +---------------------+ | 2009-04-06 23:08:31 | +---------------------+ 一行一组(0.00秒)
在回答第一个问题时,您应该了解如何在SQL中执行
JOIN
。联接是SQL语言中的基本操作。理解如何用其他语言进行循环同样重要

SELECT DISTINCT users.user_name
FROM users JOIN entries USING (user_id)
WHERE entries.header = 'foo';
关于第二个问题,不,不能在一条语句中使表名或列名成为动态的


但是,您可以在应用程序中编写代码,根据查找的列名和表名将SQL语句构建为字符串。然后将生成的字符串作为新的SQL查询执行。

您能用示例数据给出一个示例吗?我不明白你期望得到什么结果。我知道如何在PHP中做到这一点,但我经常看到,PHP的效率要低得多,速度也慢得多——特别是在需要多次调用数据库的情况下。
SELECT DISTINCT users.user_name
FROM users JOIN entries USING (user_id)
WHERE entries.header = 'foo';