LIMITで行数をCOUNTする方法は?


9

X行をキャッチしたいので、を設定しLIMIT Xます。しかし、行の総数も同時に数えるにはどうすればよいですか?

現在、私は2つの別々のクエリを使用してそうしています

SELECT COUNT(*) FROM col WHERE CLAUSE
SELECT * FROM col WHERE CLAUSE LIMIT X

これを1つのクエリで行う方法はありますか?

編集:出力はcolセルと行数でなければなりません。実際、colセルを選択した後は、テーブルの上を歩いて数えるだけです。

最初の行は1行を返し、2番目のX行を返すため、これら2つのクエリをマージすることはできません。が存在する場合にmysqlに行数を返す関数があるかどうか、私は興味がありLIMITます。


希望する出力を1行または2行表示できますか?
dezso

1
2つのクエリは現在記述されているため、互換性がありません。1つは単一の列を持つ単一のレコードを返し、もう1つはX行の多くの列を返します。意味のある回答をしてほしい場合は、望ましい出力の例を示してください。
FrustratedWithFormsDesigner

回答:


5

LIMITを実行したいようですが、LIMITなしで返される行数はわかっています。FOUND ROWSをチェック


1
これを+1してFOUND ROWS、2つのクエリを実行している間に、2番目のCOUNT(*)クエリを実行するよりもパフォーマンスが向上する場合があります(クエリとデータセットによって異なります)。
Derek Downey

これはまさに私が言ったことです。そのmysqlような重要な問題について私たちを一人にしないわけではないことを知っていました;)
Googlebot

1
お役に立ててうれしいです。心配しないでください。mysqlは依然としていくつかの重要な問題を解決します。
Alain Collins

@DTest:または(2番目のCOUNT(*)クエリを実行するよりもパフォーマンスが低下する可能性があります)。
ypercubeᵀᴹ

@ypercube正確
Derek Downey

3

SQL_CALC_FOUND_ROWSSELECTクエリで使用し、次に実行しますSELECT FOUND_ROWS()

SELECT SQL_CALC_FOUND_ROWS field_name,filed_name2 FROM col WHERE CLAUSE LIMIT X;
SELECT FOUND_ROWS() ;

1
これは、いくつかのクリーンアップとそれがより有用になるためにいくつかの詳細から利益を得るでしょう。
RLF 2016

2

私はこれが古いものであることを知っていますが、MySQL> = 8.0.17で、もう有効ではありません。cfMySQL 関数Found_Rows() したがって、両方のクエリを発行する必要があります。COUNT()残念ながら、で1つ追加してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.