2016-11-22 5 views
1

SELECT SQL_CALC_FOUND_ROWSとFOUND_ROWS()を1つのクエリとして使用できますか?MySQL SQL_CALC_FOUND_ROWSとFOUND_ROWS()を1つのクエリとして使用できますか?

$query = 'SELECT SQL_CALC_FOUND_ROWS * FROM Users LIMIT 0,50'; 
    mysql_query($query); 
    $count_query = 'SELECT FOUND_ROWS()'; 
    mysql_query($query); 

もしそうでなければ、ポイントは何ですか? なぜこれらの2つのクエリを使用しないのですか?

$query = 'SELECT * FROM Users LIMIT 0,50'; 
$count_query = 'SELECT COUNT(*) FROM Users'; 

利点はありますか? 欠点? 違いがありますか?

私が望むのは、1つのコール(制限あり)とテーブル内のすべてのレコードの合計レコード数を持つ列を作成することです。

これができない場合は、上記2つの方法の違いを理解したいと思います。

答えて

2

違いはSELECT COUNT(*) FROM Usersは行を数えなければならないということです。いくつかのデータベースエンジンでは、これは高価になる可能性があります(MyISAMはメタデータにテーブルサイズを保持するので、安価です)。以前のクエリはすでにすべての行をスキャンしていたので、カウントを記憶するように指示したので、FOUND_ROWS()はその保存されたカウントを返します。

ただし、最初のクエリでLIMITを使用しない限り、FOUND_ROWS()の使用にはほとんど意味がありません。あなたは、単に使用することができます

$result = mysql_query($query); 
$row_count = mysql_num_rows($result); 

クエリがLIMIT句が含まれている場合SQL_CALC_FOUND_ROWSの主な利点があります。 FOUND_ROWS()は、そのオプションなしで返された行の合計数を返します。これは、COUNT(*)を使用する別のクエリを実行することなく、このページの総数を計算できるので、ページネーションに便利です。

+0

2つの別々の呼び出しはどちらですか? –

+1

はい、 'FOUND_ROWS()'を呼び出す呼び出しは別のクエリでなければなりません。 – Barmar

+0

は結果と何か別の行に渡すことができると思っていました... SELECT SQL_CALC_FOUND_ROWS AS MY_COUNT –

関連する問題