zend-mysql将一个字段值的值转换为另一个字段名[已编辑]
以下是我的表格说明:zend-mysql将一个字段值的值转换为另一个字段名[已编辑],mysql,zend-framework,Mysql,Zend Framework,以下是我的表格说明: 创建表格my_表格 (idint,namevarchar(9),valuevarchar(13)) ; 插入到我的表中 (id,name,value) 价值观 (0,“时区”、“欧洲/伦敦”), (0,'语言','英语'), (0,“国家”,“45”), (0,'something','x'), (1,“时区”、“欧洲/巴黎”), (1,“语言”、“fr”), (1,‘国家’、‘46’) ; 我的结果应该是 ID TIMEZONE LANGUAGE
创建表格my_表格 (
id
int,name
varchar(9),value
varchar(13))
;
插入到我的表中
(id
,name
,value
)
价值观
(0,“时区”、“欧洲/伦敦”),
(0,'语言','英语'),
(0,“国家”,“45”),
(0,'something','x'),
(1,“时区”、“欧洲/巴黎”),
(1,“语言”、“fr”),
(1,‘国家’、‘46’)
;
我的结果应该是
ID TIMEZONE LANGUAGE COUNTRY SOMETHING
0 Europe/London en 45 x
1 Europe/Paris fr 46 (null)
如何使用Zend_Db_表或Zend_Db_选择在Zend Framework中执行此查询?非常感谢你
[根据添加的评论编辑查询]
SELECT CONCAT( 'SELECT table.id', GROUP_CONCAT(CONCAT(' , t_', REPLACE(name, '', ''), '`.value AS `', REPLACE(name, '`', ''), '' ) SEPARATOR ''), '
FROM table` ',
GROUP_CONCAT(CONCAT(' LEFT JOIN table AS t_', REPLACE(name, '', ''), '` ON `table`.id = `t_', REPLACE(name, '`', ''), '.id AND t_', REPLACE(name, '', '``'), '.name = ',
QUOTE(name) ) SEPARATOR ''), '
GROUP BY table.id' )
INTO @qry FROM (SELECT DISTINCT name FROM table) t;
PREPARE stmt FROM @qry;
EXECUTE stmt;
下面是一个使用DbTable模型的解决方案:
/*accepts a string of SQL*/
public function getQuery($sql) {
$query = $this->getAdapter->quoteInto($sql);
$result = $this->getAdapter()->fetchAll($query);
/*if you want the result as an array instead of an object: $result->toArray()*/
return $result;
}
我缺乏解析查询和演示流畅界面的SQL能力。祝你好运。这开始感觉像是家庭作业:)前一个问题不太清楚。那么?用sqlfiddle检查,只有在我们知道name的值时才能工作,除非?您知道如何在没有Zend Framework的情况下编写这样的查询吗?您使用的是什么结构?您是在控制器、映射器还是数据库表模型中执行此操作?这个信息会使构建答案变得更容易。嗨,Rockey,这里有一个清晰的例子,但可以通过mysql完成。很抱歉,这对我来说仍然没有任何意义。看起来太复杂了。如果我在构建表和查询,我将构建一个映射器类,将所需的表映射到每个域实体/对象。看起来您正试图在一个查询中完成尽可能多的任务。我做的很简单,但事实并非如此。
/*accepts a string of SQL*/
public function getQuery($sql) {
$query = $this->getAdapter->quoteInto($sql);
$result = $this->getAdapter()->fetchAll($query);
/*if you want the result as an array instead of an object: $result->toArray()*/
return $result;
}