2012-02-18 9 views
1

私は単純なMySQLクエリを実行して、LIMIT句の効果なしにクエリが返す行の数を数えます。私はCodeigniter PHPフレームワークでアクティブレコードを使用しています。SQL_CALC_FOUND_ROWS()を使用しているときのエラー

問題:SQL_CALC_FOUND_ROWSを使用するとエラーが発生します。なぜこれはそうですか?

クエリ

SELECT `listing_id`, SQL_CALC_FOUND_ROWS listing_id FROM (`listings`) LIMIT 100 

エラー

あなたのSQL構文でエラーが発生しています。右の構文は ラインで1つの

CodeIgniterのアクティブレコード

$this->db->select('listing_id') 
      ->select('SQL_CALC_FOUND_ROWS listing_id', FALSE) 
      ->from('listings') 
      ->where('price < 1000') 
      ->limit($limit, $offset) 
      ->order_by('listing_id', 'desc'); 

答えて

0
を100 '( listings)から、SQL_CALC_FOUND_ROWS listing_id LIMIT' 近くを使用するため は、MySQLサーバのバージョンに対応していること取扱説明書をご確認ください

MySqlのcount()関数を使用すると、探しているものを得ることができます。

SELECT `listing_id`, count(*) FROM (`listings`) LIMIT 100 
+1

+1私に何か新しいことを教えてください:) –

+0

これはGROUP BY文も必要としませんか? – stef

+0

これは、SQL_CALC_FOUND_ROWSがLIMITを無視するため、異なる結果を生じることがあります。 – Goose

2

SQL_CALC_FOUND_ROWSが値を返さない、それは使用して、後で取り出すことができるので、行数がLIMIT句が説明責任に入れない-whereことを示すために、修飾子を保存する必要があり、単純です(完全な結果セットを2回生成せずに)2番目のクエリ。それはDISTINCTキーワードと同じであると考えてください。

詳細については、documentationを参照してください。

関連する問題