2013年3月25日月曜日

[CakePHP]find()ってlist'だとcount(*)できないので'all'を使う。

$result=$this->Tag->ThemesTag->find('list',array(
   'fields'=>array(
      'count(*) AS count',
      'Tag.content'
   ),
   'conditions'=>array(
      'Tag.content like'=>"%".$this->data['Tag']['content']."%",
      'Theme.status'=>1
   ),
   'limit'=>10,
   'group'=>'ThemesTag.tag_id',
   'order'=>'count desc,ThemesTag.id asc',
   'recursive'=>2
));

こんな感じでlistを指定して、count(*)を使用すると、以下のようなSQLが発行されてしまう。
テーブル名.count(*)ってひどいな。。。

SELECT ThemesTag.count(*) AS count, `Tag`.`content` FROM `themes_tags` AS `ThemesTag` LEFT JOIN `themes` AS `Theme` ON (`ThemesTag`.`theme_id` = `Theme`.`id`) LEFT JOIN `tags` AS `Tag` ON (`ThemesTag`.`tag_id` = `Tag`.`id`)  WHERE `Tag`.`content` like '%a%' AND `Theme`.`status` = 1  GROUP BY `ThemesTag`.`tag_id`  ORDER BY `count` desc, `ThemesTag`.`id` asc  LIMIT 10
なので、仕方がないので、allを使用し、後でリストっぽく整形することで対処した。

※CakePHPのバージョンはcakephp-cakephp-1.3.15-9-gacd25c3.zip

0 件のコメント:

コメントを投稿