-2

151列を含むテーブルがあり、最初の列はユーザ​​ーに関連付けられたプライマリIDです。

この表の目的は、150のタスクがあり、人がタスクを完了したかどうかを追跡することです。私はおそらく、自分のタスクリストに固有の行を持つ何千人もの人がいるでしょう。

列には0から3までの値が入力され、各タスクの完了レベルを識別します。

特定の行の「3」の数を明確にカウントし、数を生成するクエリを実行する必要があります。次に、その数値を150で割って、特定のプレーヤーに完了率を与えます。

このクエリをnum_rowクエリに埋め込み、リスト内のすべてのユーザーを表示します。上記の必要なクエリ数は、表示される列の1つとしてカウントされます。

以前、num_rowリストがないページで機能する次のクエリを取得しましたが、クエリをnum_rowリストに埋め込むと、数百のうち最初の行しか表示されません。

私の間違いはどこ/何ですか?

$query9 = "SELECT * FROM ztnexus_ztnprints WHERE playerbp_id='$player_id' ";
$result9 = mysql_query($query9);
$numfields9 = mysql_num_fields($result9);
$row = 0;
for($i=0; $i < $numfields9; $i++){ if(mysql_result($result9, $row, $i) == '3'){ $name[$bpcount] = mysql_field_name($result9, $i); $bpcount++; } }
if (empty($bpcount)) { $bpcount = 0; }
$bp1 = ($bpcount / 150) ;
$bp2 =  number_format($bp1, 2) ;
$blueprints = ($bp2 * 100) ;

'$ blueprints'は、必要なパーセンテージ出力です。

ありがとうございました。

*編集* テーブルの視覚的な例を追加します。

FIELDS --->  | user_id  | task_1  | task_2  | task_3  | etc...  |
             ----------------------------------------------------
ROWS ----->  |    1     |   2     |    3    |    0    |   2     |
             |    20    |   3     |    2    |    3    |   1     |
             |    55    |   3     |    1    |    3    |   2     |
             ----------------------------------------------------

各ユーザーの3を数えるクエリが必要です。

4

2 に答える 2

0

データモデルは、達成しようとしているものに実際には適合していません。また、コードの進化に合わせてタスクを追加するにはデータモデルを変更する必要があるという意味で、脆弱です。

代わりに、マスター/詳細(または親/子)テーブルの関係を作成することをお勧めします。プレーヤー情報を含む1つのテーブルと、タスク完了情報を含む別のテーブル(プレーヤーIDでリンクされた、プレーヤーごとのタスクごとに1つの行)を用意します。

このタイプのクエリは、子テーブルの非常に単純なクエリになります。

于 2012-09-11T04:01:58.450 に答える
0

助けてくれてありがとう

SUM( IF(column=3,1,NULL) + IF(column2=3,1,NULL)=等....

また、以前のコードが numrow リストと競合した理由もわかりましi=0;た。

for($i=0; $i < $numfields9; $i++)

列数クエリから。

私のサイトではすべてのテーブルが結び付けられているため、この方法で作業する必要があります。繰り返しますが、助けてくれてありがとう!

于 2012-09-12T00:12:31.787 に答える