2011-03-18 53 views
0

我想將工作查詢轉換爲CakePHP查找。所以我失敗了,嘗試使用Containable行爲等,但沒有運氣。請幫我把這個SQL查詢轉換成CakePHP找到:CakePHP 1.3查詢問題

SELECT COUNT(DISTINCT(da.dealer_id)) 
    FROM dealer_access_list da, dealers d 
    WHERE da.dealer_id NOT IN (SELECT dealer_id FROM fixture_inventory) 
    AND d.disabled = 0 
    AND d.do_not_include IS NOT TRUE 
    AND da.dealer_id = d.dealer_id 

謝謝!

我在加入多個表格和使用SQL特殊函數時遇到問題。如果可能,我想使用CakePHP ORM,而不是普通的SQL。

回答

3

蛋糕曾經有 - !用於在查找中運行SQL的語法,這可以在您的嵌套查詢中派上用場。但是,據我所知,可能不得不將其分成兩塊。

我要在這裏把我的答案使用兩個查詢,直到有人能忍受的替代與嵌套查詢

$dealers = //get the dealer IDs in the table in the normal way. make sure it's an array of only the IDs 

$opts = array(
    'fields' => array(
    'COUNT(DISTINCT(da.dealer_id)) AS count_dealer_id' 
    ), 
    'conditions' => array(
    'NOT' => array('da.dealer_id' => $dealers), 
    'd.disabled' => 0, 
    'd.do_not_include IS NOT TRUE', 
) 
) 
$results = $this->find('all', $opts); //assuming you're in the correct model 

只要你在模型的關聯設置不當,將蛋糕找出正確的連接,你不必擔心它。

+0

謝謝!我會試試這個。我希望這是最好的方法:) – Orbitum 2011-03-20 07:25:33

+0

所以..有一個小問題..經銷商表有大約20000條記錄,當我嘗試獲得所有這些記錄時,那麼128Mb的腳本分配就沒有了。有替代解決方案嗎? – Orbitum 2011-03-22 22:19:47

+0

我添加了一些變化,現在工作查詢是這樣的,但無法使用CakePHP ORM:'$ query ='SELECT COUNT(DISTINCT(Dealer.id)) FROM _dealers經銷商,_dealers_users經銷商用戶,_user_relations UserRelation WHERE DealersUsers.user_id = UserRelation.user_id AND Dealer.id = DealersUsers.dealer_id AND Dealer.do_not_include_in_stats是不正確的 AND Dealer.disabled = 0 AND UserRelation.parent_id =」 $用戶。[ 'ID']; $ active_dealers = $ this-> User-> query($ query,false);' – Orbitum 2011-03-22 22:20:39