如何在zend db中实现sql查询

时间:2011-11-15 09:02:53

标签: php zend-framework

我尝试了另一个问题,但这个对我来说更复杂,因为我是新手。请帮助我,我尝试了不同的方法,但没有奏效。

Tour Id fetching from another query

$tourId = $row2 ['test_public_id'];

$query = select count(ms.test_public_id) as total_views, ms1.recent_views from test_stats 
ms join (select count(test_stats.test_public_id) as recent_views 
from test_stats  where test_stats.test_public_id = '$tourId' 
and test_stats.updated_on > DATE_SUB(CURDATE(), INTERVAL 7 DAY)) ms1 
where ms.test_public_id ='$tourId'" ;

2 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

$subselect = $dbAdapther->select()->from(
  array('test_stats' => 'test_stats'),
  array(
    '(COUNT(test_public_id)) AS recent_views'
  )
)->where(
  $dbAdapther->quoteInto('test_stats.test_public_id = ?', $tourId)
)->where(
  'test_stats.updated_on > DATE_SUB(CURDATE(), INTERVAL 7 DAY)'
);

$select = $dbAdapther->select()->from(
  array('ms' => 'test_stats'),
  array(
    '(COUNT(ms.test_public_id)) AS total_views' // COUNT should be in brackets to preevent Zend from interpreting it as a field name
  )
)->join(
  array('ms1' => $subselect),
  '',
  array(
    'ms1.recent_views'
  )
)->where(
  $dbAdapther->quoteInto('ms.test_public_id = ?', $tourId)'
);

虽然我将你的查询分成两个单独的查询,或者更准确地说,写一个通用的“获取数量的视图”查询,并以日期作为参数,然后我会调用它两次,无论有没有约会。

但是如果你仍然需要将这两个数字合二为一(即你不能使用UNION而不是你不必要的JOIN),我建议你改用以下代码:

$select = $dbAdapther->select()->from(
  array('ms' => 'test_stats'),
  array(
    '(COUNT(ms.test_public_id)) AS total_views',
    '(
      COUNT(
        CASE
          WHEN ms.updated_on > DATE_SUB(CURDATE(), INTERVAL 7 DAY)) THEN ms.test_public_id
          ELSE NULL
        END
      )
    ) AS recent_views'
  )
)->where(
  $dbAdapther->quoteInto('ms.test_public_id = ?', $tourId)
);

答案 1 :(得分:0)

我在Zend也是新手,但我已经尝试了这个样本并且它有效。 看到本教程,我希望它能帮到你: http://framework.zend.com/manual/en/zend.db.select.html

或者你可以这样做:

$db = Zend_Db_Table_Abstract::getDefaultAdapter();
$stmt = $db->query($query);
$result = $stmt->fetchAll();