0

簡単な方法の説明:

私は 2 つのテーブルを持っています。テーブル ONE とテーブル TWO と名付けましょう。すべてのテーブル レコードには、その作成者 (ユーザー) の ID があります。ユーザーごとのレコード数に制限はありません。

各ユーザーの統計ページを実行したいと思います。

たとえば、John がログインすると、次のようになります。

ジョン | ジョン | 20 の A (リスト) | Bの150(リスト)

デモコード

$a = mysql_query("SELECT * FROM A WHERE userID='$userID'");
$b = mysql_query("SELECT * FROM B WHERE userID='$userID'");

$a_num=mysql_num_rows($a);
$b_num=mysql_num_rows($b);

$echo "$userID | $a_num of A <a href='/a/$userID'>(list)</a> | $b_num of B <a href='/b/$userID'>(list)</a> ";

質問:

では、テーブル レコードの数が数百または数千に達した場合、(ユーザーが統計ページにアクセスするたびに) レコード数をチェックすることは最適な解決策でしょうか? 統計を実行するためのより良い方法はありますか? たぶん、各ユーザーのレコードをカウントする別のテーブルでしょうか?

ありがとう :)

4

2 に答える 2

3

結果セット自体を使用していないように見えるので、

$a = mysql_query("SELECT COUNT(*) FROM A WHERE userID='$userID'");

1ステップで必要な数が得られます。また、あなたがしていることよりもはるかに速い可能性が非常に高いです。

第二に、あなたが考えている種類の最適化は間違いなく可能です(必要なのgroup by userIDは a だけで、必要な精度に応じて、そのスクリプトを1時間ごとまたは1日ごとに実行します)が、私はその種のもので本当に待ちますサーバーの余分な作業と維持する余分なコードを意味するため、それが必要であると確信するまで。

3 番目と最後に、非推奨の mysql_query 呼び出しを取り除き、準備済みステートメントも検索します。慣れればずっと安全で難しくありません。

于 2012-06-17T14:10:28.993 に答える
0

MySQL にそれらをカウントするように指示できます。

SELECT COUNT(*) AS a_num FROM A WHERE userID='$userID'

これにより、アプリケーションと MySQL サーバー間の I/O が最小限に抑えられます。これを自分でベンチマークしてください。

于 2012-06-17T14:09:44.130 に答える