2011-11-23 18 views
0

我試圖將此查詢轉換爲CakePHP find()。但我失敗了,我不能讓使用計數:如何通過蛋糕php來翻譯此查詢以及如何調用計數?

SELECT *, COUNT(room_type_id) >=3 AS count 
FROM rooms 
GROUP BY room_type_id; 

在CakePHP找到():

$rooms = $this->Room->find('all',array(
    'fields' => array('Room.*', 'RoomType.*', 'count(Room.room_type_id) >= 3 AS count_room')), 
    'conditions' => array("NOT" => array('Room.id' => $rNo)), 
    'group' => array('Room.room_type_id'), 
)); 

如何獲得CakePHP執行數

我用這個數如下所示:

foreach($rooms as $room){ 
    echo "ROOM COUNT : ".$room['count']; 
} 

但它不好。

回答

1

你必須這樣做,兩個主要方式。

如果你只在count值感興趣,你一定要使用'count'選項CakePHP的AppModel::find()方法:

$this->Room->find('count', array(
    'conditions' => array('Room.room_type_id >=' => 3, ...), 
    'recursive' => 0, // Optional, in case you need to speed up things a bit 
)); 

這樣,find方法不直接和GROUP BY返回計數值不會使感。

但是,如果你想檢索每列,以及,你可以使用這樣的「常規」找到查詢:

$this->Room->find('all', array(
    'conditions' => array('Room.room_type_id >=' => 3, ...), 
    'group' => 'Room.room_type_id', 
    'fields' => array('Room.*', 'count(Room.room_type_id) as room_count'), 
    'recursive' => 0, // Optional, in case you need to speed up things a bit 
)); 

find()會返回一個數組,如:

[0] => 
    [Room] => 
    [room_type_id] => 3 
    [0] => 
     [room_count] => 2, 
... 

我不記得CakePHP如何返回數組,但您可以使用debug()來檢查它並知道如何檢索它(例如$rooms[0]['Room'][0]['room_count'])。

最後提示:檢索每個列值幷包括GROUP BY子句沒有多大意義,除非您爲每列使用SQL aggregate function(或除非您確實知道自己在做什麼)。

+0

是的,我想檢索每一列,但是這一列是房間類型的總計數大於3.例如,我想要從酒店預訂3個同類型的房間。所以我得到的數據有3個房間類型相同的房間。這就是爲什麼如何計算每個room_type的數量大於3. –

+0

我編輯了答案,以便爲您提供更多關於如何在不使用「count」選項時檢索計數值的詳細信息。 – elitalon

+0

好吧,我知道這一點,但我不知道如何通過php code.e.g獲得room_count。如果想獲得room_type_id ... $ room ['Room'] ['room_type_id']但是我得到room_count by $ room ['room_count'] ...不行。請解釋我如何獲得room_count。謝謝。 –

0

您可能需要使用find('count')功能:

$this->Room->find( 
    'count', 
    array(
     'conditions' => array('room_type_id >= 3'), 
     'group'  => 'room_type_id' 
    ) 
); 
+0

如何獲得此計數?請回答我。 –

+0

http://book.cakephp.org/view/1020/find-count – JJJ

+0

不,不是這樣的。我想得到總計數大於3的房間總數。不是id大於3. –