我在使用Zend Framework方式的内部联接创建选择查询时遇到了困难。
我查看了手册,但无法弄清楚如何编写以下语句:
SELECT m.user_id, m.timestamp, m.status
FROM (
SELECT user_id, max( timestamp ) AS timestamp
FROM timeclock_clockings
GROUP BY user_id
) AS x
INNER JOIN timeclock_clockings AS m ON m.timestamp = x.timestamp
任何帮助都将不胜感激。
由于
答案 0 :(得分:2)
您可以使用Zend_Db_Expr()
并创建两个$select
个实例来完成此操作。
$db = new Model_TimeclockClockings(); // or whatever yours is named
$nested = $db->select()
->from('timeclock_clockings', array('user_id', 'max(timestamp) AS timestamp'))
->group('user_id');
$select = $db->select()
->setIntegrityCheck(false) // required for joins
->from(array('x' => new Zend_Db_Expr('(' . (string) $nested . ')')))
->join(array('m' => 'timeclock_clockings'), 'm.timestamp = x.timestamp', array());
echo $select; // this should look like your query
关于它。在SO上实际上还有其他几个类似的问题。但我想也许你很难理解它。
请注意,join()
是INNER JOIN
,您也可以joinLeft()
使用LEFT JOIN
。或joinRight()
等等。