2014年6月4日水曜日

[CakePHP]find('list')はDISTINCT使えないのね。

$this->Comment->find('list',array(
  fields' => array('DISTINCT user_id'),
  'conditions' => $conditions,
));


こんな感じでやったら、以下のようなエラーが。

PDOEXCEPTION
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT `Comment. user_id` FROM `test`.`comments` AS `Comment` WHERE 1 = 1 ' at line 1



このサイトによると、DISTINCTってSELECTの直後に来ないといけないいたい。でもCakePHPのfind('list')ってデフォルトでは、SELECTの直後でIDを指定しているので、DISTINCTがその後になってしまうんですよね。

なので、group byを使うといいみたい。

$this->Comment->find('list',array(
  fields' => array('user_id'),
  'conditions' => $conditions,
  'gruop' => 'user_id'
));

※Group Byの豆知識
 デフォルトだとGROUP BYで指定されたカラムの昇順になる。いきなり順番変わってびっくりした。ORDER BY を使って任意のカラムの昇順、降順を指定できる。

0 件のコメント:

コメントを投稿