0

SQL_CALC_FOUND_ROWS をクエリに追加しようとしています (これはページネーション用ではないことに注意してください)

これを CakePHP クエリに追加しようとしていることに注意してください。現在持っているコードは以下のとおりです。

return $this->find('all', array(
                'conditions' => $conditions,
                'fields'=>array('SQL_CALC_FOUND_ROWS','Category.*','COUNT(`Entity`.`id`) as `entity_count`'),
                'joins' => array('LEFT JOIN `entities` AS Entity ON `Entity`.`category_id` = `Category`.`id`'),
                'group' => '`Category`.`id`',
                'order' => $sort,
                'limit'=>$params['limit'],
                'offset'=>$params['start'],
                'contain' => array('Domain' => array('fields' => array('title')))
            ));

テーブル'fields'=>array('SQL_CALC_FOUND_ROWS','に適用しようとするため、これは明らかに機能しないことに注意してください。たとえば、カテゴリSQL_CALC_FOUND_ROWSSQL_CALC_FOUND_ROWSSELECT.,

とにかくこれを行うことはありますか?どんな助けでも大歓迎です、ありがとう。

4

4 に答える 4

0

mysqlSQL_CALC_FOUND_ROWSを使用してcakephppaginateを確認することをお勧めします。その人はあなたと同じような構文を持っていて、それは彼のために働きました。

それでも問題が解決しない場合は、いつでも$this->find('count', $params);http://book.cakephp.org/view/1020/find-count)または$this->query('YOUR SQL QUERY HERE');http://book.cakephp.org/view/1027/query )を使用できます。

'joins'それ以外に、と一緒に使用しないでください'contain'ドキュメントによると、「SQLエラー(テーブルの重複)が発生する可能性があるため、Containableの代わりにjoinsメソッドを使用する必要があります」。

于 2010-06-02T20:46:16.337 に答える
0

ケーキの組み込み関数でそれを実現する方法を見つけました。

$dbo = $this->User->getDataSource();

//buildStatement() creates a Standard SQL Statement
$subQuery = $dbo->buildStatement(
    array(
        'fields' => $fields,
        'table' => $dbo->fullTableName($this->User),
        'alias' => 'User',
        'limit' => null,
        'offset' => null,
        'joins' => array(),
        'conditions' => $conditions,
        'order' => null,
        'group' => null
    ),
    $this->User
);

//Add the SQL_CALC_FOUND_ROWS part
$subQuery = str_replace('SELECT', 'SELECT SQL_CALC_FOUND_ROWS', $subQuery);
$Users = $this->User->query($subQuery);

//Get FOUND ROWS
$foundRows = $this->User->query("SELECT FOUND_ROWS()");
$count = intval($foundRows[0][0]['FOUND_ROWS()']);
于 2010-12-01T09:12:51.263 に答える
0

たぶん、次のようにフィールドパラメーターを作成できます。

'fields'=>array('SQL_CALC_FOUND_ROWS *','COUNT(`Entity`.`id`) as `entity_count`')
于 2010-06-03T03:13:02.543 に答える
0

これは、クエリにエスケープされていないものを取得するための恐ろしい、恐ろしいハックですが、機能します。SQL_CALC_FOUND_ROWS

$categories = $this->Category->find('all', array(
   'fields' => array('SQL_CALC_FOUND_ROWS 0.0 AS dummy_field,1', 'Category.*', ...),
   'limit'  => 42,
   ...
));
$totalCategories = $this->Category->query('SELECT FOUND_ROWS() as `total_categories`');

すべてのクレジットはhttp://mogura.in/blog/2011/06/17/cakephp-1-3-sql_calc_found_rowsの "Kani" にあります。

于 2011-06-29T07:20:20.990 に答える