Как перевести этот запрос по торту php и как считать кол? - PullRequest
0 голосов
/ 23 ноября 2011

Я пытаюсь преобразовать этот запрос в CakePHP find().Но я терплю неудачу, я не могу использовать счет:

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

В CakePHP find ():

$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'];
}

но это не нормально.

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

У вас есть два основных способа сделать это.

Если вас интересует только значение 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 для каждого столбца (или если вы действительно не знаете, что делаете) .

0 голосов
/ 23 ноября 2011

Возможно, вы захотите использовать функцию find( 'count' ):

$this->Room->find( 
    'count',
    array(
        'conditions' => array( 'room_type_id >= 3' ),
        'group'      => 'room_type_id'
    )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...