Php 将mysql值转换为列
我是这个社区的新成员,但如果我的问题不符合规则,请随时关闭此页面。谢谢 这是我的php数据库查询Php 将mysql值转换为列,php,mysql,sql,wordpress,pivot,Php,Mysql,Sql,Wordpress,Pivot,我是这个社区的新成员,但如果我的问题不符合规则,请随时关闭此页面。谢谢 这是我的php数据库查询 $sql = " SELECT meta_key , meta_value FROM " . $wpdb->prefix . "postmeta WHERE post_id = " . $value->post_id . " AND meta_key LIKE '_field_%'"; 这是目前为止
$sql = "
SELECT meta_key
, meta_value
FROM " . $wpdb->prefix . "postmeta
WHERE post_id = " . $value->post_id . "
AND meta_key LIKE '_field_%'";
这是目前为止的输出
| meta_key | meta_value |
| --------- | ---------- |
| _field_11 | Rosenie |
| _field_30 | Tagarda |
| _field_12 | Talibo |
| _field_11 | Rondeo |
| _field_30 | Soroysoroy |
| _field_12 | Balos |
但我希望是这样
| _field_11 | _field_30 | _field_12 |
| ---------- | ---------- | --------- |
| Rosenie | Tagarda | Talibo |
| Rondeo | Soroysoroy | Balos |
有什么办法可以这样做吗?提前谢谢
我的临时解决方案:您可以使用它来透视数据集。假设您有一列定义了如何组合行,比如说
some\u id
,您可以这样做
SELECT some_id,
max(case when meta_key = '_field_11' then meta_value end) as field_11,
max(case when meta_key = '_field_30' then meta_value end) as field_30,
max(case when meta_key = '_field_12' then meta_value end) as field_12
FROM t_postmeta
WHERE post_id = ? AND meta_key LIKE '_field_%'
GROUP BY some_id
如果您没有某些\u id
列,那么您至少需要一列来对行进行排序,我们可以使用行编号()
-例如排序\u id
:
SELECT
max(case when meta_key = '_field_11' then meta_value end) AS field_11,
max(case when meta_key = '_field_30' then meta_value end) AS field_30,
max(case when meta_key = '_field_12' then meta_value end) AS field_12
FROM (
SELECT t.*, ROW_NUMBER() OVER(PARTITION BY meta_key ORDER by ordering_id) AS rn
FROM t_postmeta t
WHERE post_id = ? AND meta_key LIKE '_field_%'
) t
GROUP BY rn
只需在php循环中解析输出,或者使用一些脚本格式化结果。您如何定义哪个
\u字段\u 11
与哪个\u字段\u 30
或\u字段\u 12
相关?对于这三行,应该有一个公共值的其他列。@我尝试了一个临时解决方案,我想这就是你的意思。您可以在meta_key
上尝试group by
,请将pastebin中的代码添加到您的问题中。