具有键/值对的MySQL表,获取键作为列名

具有键/值对的MySQL表,获取键作为列名,mysql,sql,Mysql,Sql,我有一个MySQL数据库,可以在其中执行以下查询: mysql> SELECT Name, Value from info WHERE ID = 110506; +-------+-----------+ | Name | Value | +-------+-----------+ | start | 228196 | | stop | 228318 | | fwd | 0 | +-------+-----------+ 3 rows in

我有一个MySQL数据库,可以在其中执行以下查询:

mysql> SELECT Name, Value from info WHERE ID = 110506;

+-------+-----------+
| Name  | Value     |
+-------+-----------+
| start | 228196    |
| stop  | 228318    |
| fwd   | 0         | 
+-------+-----------+
3 rows in set (0.00 sec)
我正在尝试构造一个查询,结果将是

+--------+--------+-----+
| start  | stop   | fwd |
+--------+--------+-----+
| 228196 | 228318 | 0   |
+------- +--------+-----+
1 row in set (0.00 sec)

我事先不知道“我的名字”列中的名字是什么,所以我需要根据
SELECT
query的结果动态设置它们。我该怎么做呢?

您可以使用
案例
WHEN
子句,并使用与结果集的列名相同的值。您必须应用聚合函数将结果汇总到一行中

下面的示例使用
MAX
aggregate函数总结结果

select
    max( case `name` when 'start' then `value` end ) as `start`
  , max( case `name` when 'stop' then `value` end ) as `stop`
  , max( case `name` when 'fwd' then `value` end ) as `fwd`
from `table_name`
;
试试这个

SELECT
    MAX(CASE WHEN name = 'start' THEN value END) AS `start`,
    MAX(CASE WHEN name = 'stop' THEN value END) AS `stop`,
    MAX(CASE WHEN name = 'fwd' THEN value END) AS `fwd`
FROM info
WHERE id = 110506;

最好在应用程序中执行此操作。