【发布时间】:2023-03-25 00:34:01
【问题描述】:
我目前遇到了一个问题,我需要将许多行转为一行,由特定的键定义。我知道 GROUP_CONCAT 功能并且目前正在使用它,但我想避免在获取结果后在 PHP 中使用explode。我的桌子是这样的:
----------------------------------
| primary_id | key_value | value |
----------------------------------
| 1 | my_key_1 | val_1 |
| 1 | my_key_2 | val_2 |
| 1 | my_key_3 | val_3 |
| 2 | my_key_4 | val_4 |
| 2 | my_key_5 | val_5 |
----------------------------------
我想构建一个 MySQL 查询,它针对主 ID 1 和主 ID 2 呈现完全一样的内容:
-----------------------------------------------
| primary_id | my_key_1 | my_key_2 | my_key_3 |
-----------------------------------------------
| 1 | val_1 | val_2 | val_3 |
-----------------------------------------------
------------------------------------
| primary_id | my_key_4 | my_key_5 |
------------------------------------
| 2 | val_4 | val_5 |
------------------------------------
所以我可以在 PHP 中将输出作为数组检索,格式如下:
$output[1][my_key_1] = val_1
$output[1][my_key_2] = val_2
...
GROUP_CONCAT 功能有效,但如果只使用 SQL 来获得我需要的形式的值会更好。
不胜感激,最好的问候。
【问题讨论】:
-
你可以normalize your DB 来避免这类问题。
-
这是一个 Wordpress 默认表,不能规范化,或者至少不应该规范化。
-
“key_value”列中的值可以是任意值,而不仅仅是一组 3 个不同的值,因此我的问题与该主题有点不同。
标签: php mysql group-by explode concat