![](/img/trans.png)
[英]Use Mysql JOIN on column value as column name with another table column name
[英]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.