MySQL:多个列值作为一个逗号分隔的字符串?

MySQL:多个列值作为一个逗号分隔的字符串?,mysql,select,Mysql,Select,假设我有一个select查询,如: SELECT * FROM tablename 表中有字段1、字段2和字段3 有人知道是否有可能获得一个结果集,其中只有一行和一个字段,列的值以逗号分隔,如下所示: "fieldvalue1, fieldvalue2, fieldvalue3" 问题是我事先不知道表的列名 另一个问题是,预先准备好的语句不是解决方法,因为所有这些都应该在触发器内完成,而MySQL不允许在触发器内使用动态游标/选择 首先,要提前找到列的名称,假设您有表的名称,您可以将它们作为

假设我有一个select查询,如:

SELECT * FROM tablename
表中有字段1、字段2和字段3

有人知道是否有可能获得一个结果集,其中只有一行和一个字段,列的值以逗号分隔,如下所示:

"fieldvalue1, fieldvalue2, fieldvalue3"
问题是我事先不知道表的列名


另一个问题是,预先准备好的语句不是解决方法,因为所有这些都应该在触发器内完成,而MySQL不允许在触发器内使用动态游标/选择

首先,要提前找到列的名称,假设您有表的名称,您可以将它们作为任何其他查询获取:

显示
您的_表中的列

一旦你有了名字,你可以做:

从您的_表中选择CONCAT(field1',',',field2',',field3)作为新字段


这里似乎有3个问题:

  • 获取一个包含1行1字段的结果集:MYSQL有一个CONCAT_WS函数,其工作方式如下:
    选择CONCAT_WS(',',Field1,Field2,Field3)
    将返回“Field1Value,Field2Value,Field3Value”

  • 我不确定您将如何获得这些列名。您需要从sql语句、字符串等获取它们吗?您可以获取表名“ShowColumns fromTableName”。字段列将具有列名

  • mysql中有触发器(我想是在5.0.2中添加的):


  • 我做了一些研究,只涉及到正确连接列名的GROUP_。但问题是

    SELECT (SELECT GROUP_CONCAT( cols.column_name) FROM (SELECT column_name FROM information_schema.columns WHERE table_name='test_table') as cols) FROM test_table
    
    将为每个表行返回一个包含列名的相同串联字符串,而不是将其作为外部select语句的列名进行计算并返回实际值

    从我在所有讨论这类问题的论坛(还有很多论坛)上读到的内容来看,如果没有事先准备好的声明,真的没有办法让这项工作起作用


    我只能想到另一种方法,那就是在每个表上都有一个专用列,在插入或更新时将各个列值连接在一起,这样您就可以选择这一个字段而不是整个字段集。

    我误解了您的问题,哎呀。我以为您希望列名以逗号分隔。这行不通,因为我不能使用prepared语句来构造select(因为您不能在触发器中使用prepared语句)。我想这是做不到的…不,这是一个问题。我知道如何使用存储过程、游标、触发器、准备好的语句以及如何从表中获取字段名。但不可能在触发器内完成所有这些。MySQL就是不允许。如果你有能力运行服务,你可以使用触发器将数据插入定期扫描的表中。根据您的需要,您可以将触发器设置为“INSERT INTO TriggeredCodeTable(csvfields,tablename)”这样简单。该服务将根据需要经常扫描该表,并创建动态sql来执行您需要的操作。不像简单的触发器那么好,但是可行