繁体   English   中英

MySQL:LEFT JOIN或UNION表并将列值设置为列名?

[英]MySQL: LEFT JOIN or UNION table and set column value as column name?

好吧,所以我知道我甚至可能因为提出这样的事情而得到扩大,但它让我好奇......

我们假设我有一个像这样的表:

content
---------------
| id | status |

和这样的表格:

attributes
---------------------------
| id | pid | name | value |

某些属性可能在哪里

| 1 | 1 | status | published |
| 2 | 1 | viable | yes       |

是否可以进行查询,以便属性的NAME列中的值表示为列名?

例:

SELECT a.name AS {a.name value} FROM content c LEFT JOIN attributes a ON a.pid = c.id

因此,当我完成结果时,我可以做类似的事情

foreach($result as $r){
    echo $r->viable;  //yes
    echo $r->status;  //published
}

我知道这不遵循关系数据库,但对于一些多余的属性,它对我有用。 我想到的另一个选项是将数据存储为序列化字符串,但这让我感到畏缩。

MySQL没有对数据透视查询的本机支持,并且它无法将任意数量的行转换为列,因为必须提前知道列。 换句话说,你必须用PHP做到这一点。

我不确定是否可以从您的查询中返回多个对象(每个对象希望只有一行,但您已经承认缺乏规范化)。 如果每次只返回一个,那就更简单了。 但是,我将假设可以返回多个并且它们在pid上键入:

$content = array();
while ($row = $result->fetch()) {
   //Prevent a PHP warning; this step can be skipped
   if (!isset($content[$row->pid])) {
      $content[$row->pid] = array();
   }

   $content[$row->pid][$row->name] = $row->value;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM