1

以下の例に似たクエリがあります (この投稿では列名のみが変更されています)。これは、LIMIT を使用して MySql データベースからページ化されたレコードの選択を返し、FOUND_ROWS を介して制限が適用されなかった場合に返されるレコードの数を返します。 ().

以下の場合、SELECT FOUND_ROWS() は単純に 10 を返しますが、制限が解除された場合、クエリがより多くの行を返すことはわかっています。私はまた、他の多くの非常によく似たクエリに期待するように、これを機能させています。

MySql が予期しない値を返し、ここに表示されていることを説明できる原因は何ですか?

SELECT 
id, 
firstname, 
surname, 
'' as anothercolumn1, 
date as anothercolumn2, 
'literal' as db 

FROM some_table 

WHERE 
filter_col LIKE @val1 
and surname LIKE @val2 
ORDER BY surname, firstname 
LIMIT 0, 10; 

SELECT FOUND_ROWS();
4

2 に答える 2

3

呼び出したときに正確な結果を得るにSQL_CALC_FOUND_ROWSは、最初のキーワードの後に​​追加する必要があります。SELECTFOUNC_ROWS()

SELECT SQL_CALC_FOUND_ROWS
id,
firstname,
...

SELECT FOUND_ROWS();

マニュアル

于 2012-05-14T16:24:09.747 に答える