Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将mysql值转换为列_Php_Mysql_Sql_Wordpress_Pivot - Fatal编程技术网

Php 将mysql值转换为列

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_%'"; 这是目前为止

我是这个社区的新成员,但如果我的问题不符合规则,请随时关闭此页面。谢谢

这是我的php数据库查询

$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中的代码添加到您的问题中。