[CakePHP2]バーチャルフィールドを用いたqueryに頼らないfindでの集計方法

[2013/03/05]修正

アイテムに対するクリック数の取得など、集計をしたい時
なおかつ、IPでユニークにしたい時などに使えます。

ポイントは、なんと言ってもバーチャルフィールドです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$days = 7;
$end = date('Y-m-d H:i:s', mktime(0, 0, 0, date('m') , date('d') - 1, date('Y')));
$start = date('Y-m-d H:i:s', mktime(0, 0, 0, date('m') , date('d') - (1 + $days), date('Y')));
$this->Click->virtualFields = array('dstsum' => 'count(distinct Click.ip)');
$data = $this->Click->find('all', array(
		'conditions' => array(
			'Click.created >=' => $start,
			'Click.created <' => $stop,
		),
		'fields' => array('Item.id', 'dstsum'),
		'recursive' => 0, 'limit' => 5,
		'order' => array('dstsum' => 'desc'),
		'group' => 'Click.Item_id',
		));

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です