2009-08-15 3 views
1

以下は、DB内の総写真数を取得するために使用する現在のコードです。推定数は、ファイルのフォルダバランスのためにアップロードしたいフォルダ番号です。PHPのmysqlテーブルから合計レコードを取得する最も簡単な方法

私は以下のより良い方法があると感じていますか?

$sql = 'SELECT auto_id FROM friend_user_photo'; 
$query = executeQuery($sql); 
$rowcount = mysql_num_rows($query); 

friend_user_photoテーブルに

UPDATEレコードの数を返す行数$:

があるデータベースについての情報を読むための方法ではありませんが。上記の方法やCOUNTを使用する方が速いでしょうか?

friend_user_photo FROM

+0

typo =の前提で、「mys2ql」から「mysql」に変更されたタグ –

答えて

5

また、COUNTを使用することができます。

$sql = 'SELECT COUNT(*) FROM friend_user_photo'; 
$query = executeQuery($sql); 

これは、結果の数を含む単一の行を返します。これはまた、通常の集約関数であるため、結合、サブクエリ、条件(WHERE)、グループ化、およびそのすべての良いことを行うことができます。

これを別のフィールドとして扱うこともできます。このフィールドをエイリアスにして、結合やサブクエリで使用することができます。あなたはまた、例えば、追加データを選択することができます。

$sql = 'SELECT COUNT(*), name FROM table GROUP BY name 

これは、名前の明確なリストを返しますが、また、それらの名前のそれぞれに存在するレコードの数が含まれています。カウントする代替のための

編集()

あなたはCOUNT(*)を使用したくない場合、あなたはまた、「番組表のステータスを」を使用することができます。例えば:

$sql = "SHOW TABLE STATUS LIKE 'friend_user_photo'"; 
// Note, this LIKE is a regular LIKE, so wild cards can be used 

これは、行を含む種々のメタデータを持つ行を返すだけでなく、キーの長さ(バイト単位)とデータ長(バイト単位)、ならびに他の多くのデータを含むであろう。これは通常、テーブルが現在実行中の別のクエリによってロックされていない限り、COUNT(*)のような集約関数を実行するために、メタデータをプルするだけなので、非常に高速です。

+0

ありがとう、私はレコードの合計nu8mber、WHEREまたは何も条件がない、合計数が必要ない正確でなければならない、それは見積もりになる可能性がある、私はテーブル情報を読んで、より速い行を見積もる方法があるかもしれないと思っていたかもしれない。 – JasonDavis

+0

"show table status"他の何かより速い? – JasonDavis

+1

SELECTのような論理的なクエリを実行するために、テーブルのメタデータを取得するだけで、他のどのテーブルよりも高速に実行できます。テーブルがすでにクエリによってロックされている場合は、もちろん遅くなります。 –

4

SELECT COUNT(auto_id)は、より直接的なのだろうと、あなたははmysql_num_rows($クエリ)を使用する必要はありません。 $ queryから返された値をチェックするだけです。

編集:あなたはCOUNT以外のアイデアをお届けしたいと考えています。

auto_idは単にLIMITについてどのようにそれから1で1と刻みで開始整数または長い、等...の場合:

SELECT auto_id FROM friend_user_photo LIMIT 0,1 

私はそれはしかし速いかどうかわからない...

EDIT#2:これらの記事によると

あなたはMyISAMテーブルを使用している場合、COUNTは最速です:

http://lists.mysql.com/mysql/184095 -

SELECT COUNT(*)テーブルから、それは 行数をキャッシュするためのMyISAMのための最速です。これには、ヌル値を持つ行も含まれます。

Whats the best way to get total # of records in a mysql table with php?

+0

使用されているエンジンによっては、COUNT()がかなり遅くなる可能性があります。 www.mysqlperformanceblog.com/2006/12/01/count-for-innodb-tables/ –

+0

情報ありがとうございました – JasonDavis

関連する問題