2011-11-15 118 views
-1

我嘗試了自己的另一個查詢,但這個對我來說比較複雜,因爲我是zend新手。請幫助我,我嘗試了不同的方式,但沒有奏效。如何在zend數據庫中執行sql查詢

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'" ; 
+0

描述什麼「沒有工作」 - 錯誤消息,意想不到的結果等將是有用的。例如,您顯示的代碼缺少引用('$ query ='之後和'select'之前),但可能會只是一個錯字。更多信息會很好。 – StasM

回答

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) 
); 
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(); 
相關問題