我想在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而不是限制,現在它的工作原理。稍後會嘗試調試爲什麼會發生這種情況..謝謝!