ZF1 DB选择内部连接

时间:2014-04-09 15:37:06

标签: mysql zend-framework inner-join

我在使用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

任何帮助都将不胜感激。

由于

1 个答案:

答案 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()等等。

More info on joins here.