我想在Zend框架2创建一个SQL(MySQL的)查询,如:Zend的2子查询列
SELECT a.id,
a.name,
a.age,
(SELECT MAX(score)
FROM scores AS s
WHERE s.user_id = a.id) AS max_score,
(SELECT SUM(time)
FROM games_played_time AS gpt
WHERE gpt.user_id = a.id) AS time_played
FROM users AS a
ORDER BY last_visited DESC
LIMIT 0, 100
记住,这是现有查询的一个人为的例子。
我试图创建子查询,然后创建哪里,当我使用的主要选择查询:
$select->columns(
array(
'id',
'name',
'age',
'max_score' => new Expression('?', array($sub1),
'time_played' => new Expression('?', array($sub2)
)
我使用也试过:
$subquery = new \Zend\Db\Sql\Expression("({$sub->getSqlString()})")
即使拉姆达功能,如这里建议:http://circlical.com/blog/2014/1/27/zend-framework-2-subqueries-subselect-and-table-gateway
仍然没有运气,因为所有的时间我总是得到像这样的错误:
No data supplied for parameters in prepared statement
而且,当我成功完成查询工作时,结束了该列包含子查询的文本。它开始看起来不可能在列方法中创建多个表达式。有任何想法吗?
求解: 我重写了@Tim Klever提出的查询查询。除了一个查询之外,Everythin工作。事实证明,在子查询和主查询中使用限制时存在某种问题。在我的情况下,其中一个子查询返回多行,所以我使用limit(1)强制返回单个值。但使用,结果产生错误:
No data supplied for parameters in prepared statement
我改变了查询使用MAX而不是限制,现在它的工作原理。稍后会尝试调试为什么会发生这种情况..谢谢!