【问题标题】:MySQL : multiple column values as 1 comma-separated string?MySQL:多个列值作为 1 个逗号分隔的字符串?
【发布时间】:2011-01-03 22:59:57
【问题描述】:

假设我有一个选择查询,例如:

SELECT * FROM tablename

表格中有列:field1、field2 和 field3

有谁知道是否有可能得到一个只有 1 行和 1 个字段的结果集,列的逗号分隔值,如下所示:

"fieldvalue1, fieldvalue2, fieldvalue3"

问题是我事先不知道表的列名...

另一个问题是准备好的语句不是要走的路,因为所有这些都应该在触发器内完成,而 MySQL 不允许在触发器内进行动态游标/选择。

【问题讨论】:

  • 我误解了你的问题,哎呀。我以为你想要用逗号分隔的列名。

标签: mysql select


【解决方案1】:

我已经进行了一些研究,仅得出正确的 GROUP_CONCATenating 列名。但问题是,

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

将返回一个包含列名的相同连接字符串,对于每个表行一次,而不是将其评估为外部选择语句的列名并返回实际值。

根据我在所有讨论此类问题的论坛中阅读的内容(而且有很多),如果没有准备好的陈述,真的没有办法让它发挥作用。

我只能想到另一种方法来做到这一点,那就是在每个表上都有一个专用列,您可以在其中连接 INSERT 或 UPDATE 上的各个列值,因此您可以简单地选择这一字段而不是完整的字段集。

【讨论】:

    【解决方案2】:

    首先,要提前找出列的名称,假设你有表的名称,你可以像任何其他查询一样获取它们:

    显示来自your_table 的列

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

    SELECT CONCAT(field1,',',field2,',',field3) AS newField FROM your_table

    【讨论】:

    • 这行不通,因为我不能使用准备好的语句来构造选择(因为你不能在触发器中使用准备好的语句)。我想它只是无法完成......
    【解决方案3】:

    您似乎有 3 个问题:

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

    2. 我不确定您将如何获得这些列名。您是否需要从 sql 语句、字符串等中获取它们?你可以得到表名`SHOW COLUMNS FROM tablename'。 Field 列将具有列名。

    3. 在 mysql 中提供了触发器(我认为是在 5.0.2 中添加的):http://dev.mysql.com/doc/refman/5.0/en/triggers.html

    【讨论】:

    • 不,这是 1 个问题。我知道如何使用存储过程、游标、触发器、准备好的语句以及如何从表中获取字段名。但不可能在触发器内完成所有这些操作。 MySQL 就是不允许这样做。
    • 如果您有能力运行服务,您可以使用触发器将数据插入到定期扫描的表中。根据您的需要,您可以让触发器像“INSERT INTO TriggeredCodeTable(csvfields,tablename)”一样简单。该服务会根据需要经常扫描该表并创建动态 sql 来执行您需要的操作。不如简单的触发器好,但可行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    相关资源
    最近更新 更多