読者です 読者をやめる 読者になる 読者になる

ITの隊長のブログ

ITの隊長のブログです。いや、まだ隊長と呼べるほどには至っていないけど、日々がんばります。CakePHPとPlayFrameworkを使って仕事しています。最近はAngular2をさわりはじめたお(^ω^ = ^ω^)

【CakePHP】GMO iclusta でSQL文が長いよーってエラーがでたのでそれを解消するためにfindをOverrideした話

CakePHP PHP MySQL GMO iCLUSTA

スポンサードリンク

ERROR 1104 (42000): The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay

な、なんだこのエラーは。。。

どうやら、MySQLの設定でSQL文が長いとダメらしい。

んで、GMOのiclustaってサービス使っている人はこれに悩まされるとか。

そんな長くないんだけどな。。。このFuピーーーーーーGMO!!!

ということで、問題のsqlを実行する前に下記行を追加するとなおります。

<?php
$this->query('SET SQL_BIG_SELECTS=1');

だがしかし、全部のソースにいれるのは面倒なので、$this->find()をoverrideすることにしました。

  • ~/app/Model/AppModel.php
<?php

class AppModel extends Model {

  /**
   * GMO アイクラスタの環境により、SQL_BIG_SELECTS を 1 にする
   * @override
   */
  public function find($type = 'first', $query = array()) {
    // これを入れると長いSQLでもおk
    $this->query('SET SQL_BIG_SELECTS=1');
    return parent::find($type, $query);
  }
}

これでよし。