2009-03-04 14 views
0

LIMIT条件を削除して以前に実行したクエリの合計結果サイズを取得するのに役立つSQL_CALC_FOUND_ROWSとFOUND_ROWS()について読んだところです。今私は、既存のWebアプリケーションでこの機能を使いたいと思っています。既存のWebアプリケーションにSQL_CALC_FOUND_ROWSとFOUND_ROWS()を組み込む方法

私は心の中でいくつかのアプローチがありますが、私は最善であるかわからないんだけど:

1)PHPは、すでにFOUND_ROWS()機能を使用する機能を持っていますか?私はinnodbストレージエンジンでmysqliとmysql 5でPHP 5を使用しています。

2)すでに構築しているアプリケーションには、mysqliライブラリをラップする独自のデータアクセスオブジェクトがあります。頻繁に使用されるCRUDクエリの生成を担当します。このオブジェクトを編集して、すべてのSELECTクエリにSQL_CALC_FOUND_ROWSを含める必要がありますか?どのような合併症が存在するか?

他のアイデアやフィードバックはありますか?

答えて

2

1)PHPにはすでにFOUND_ROWS()機能を使用する機能がありますか?私はinnodbストレージエンジンでmysqliとmysql 5でPHP 5を使用しています。

私はmysql_num_rowsと思っていましたが、ちょっとブラウズして間違っていると思いました。

UPDATE:はい、私が間違っている:)

2)私は建物だアプリケーションがすでにmysqliのライブラリをラップし、それ自身のデータアクセスオブジェクトを持っています。よく使われるCRUDクエリを生成します。 SELECTクエリにSQL_CALC_FOUND_ROWSを含めるようにこのオブジェクトを編集する必要がありますか?どのような合併症が存在するか?

SQL_CALC_FOUND_ROWSクエリにはLIMIT句がない場合に返される行数を計算しようとします。

これは、1つのメタデータを利用し、1例のみになります。

  1. あなたのテーブルにはMyISAMエンジンを使用しています
    • あなたのクエリがWHERE句を持っていない。

他の例ではSQL_CALC_FOUND_ROWSは、パフォーマンスに影響を与え、行を一つずつカウントされます。

各クエリには追加しないでください。

+0

@Quassnoi:MyISAM(またはInnoDB)+「SQL_CALC_FOUND_ROWS」に関して何も見つかりませんでした。InnoDBが行を1つずつ数えていることを確かめてください。 –

+0

@Alix:はい、そうです。 – Quassnoi

+0

ありがとう、私はそれについてもっと学ぶことができるようにリンクがありますか? –

1

1.)いいえ、phpにはこのような機能はありません。

2.)本当に必要なときにのみSQL_CALC_FOUND_ROWSを使用する方が良いと思います。

関連する問題