-2

我有一个包含 151 列的表,第一列是与用户绑定的主 ID。

该表的目的是跟踪一个人是否完成了一项任务,共有 150 个任务。我可能会有成千上万的人为他们自己的任务列表设置一个独特的行。

这些列填充了从 0 到 3 的值,用于标识每个任务的完成级别。

我需要运行一个查询,该查询将清楚地计算特定行中“3”的数量并产生一个数字。然后,我将把这个数字除以 150,得到特定玩家的完成百分比。

我将把这个查询嵌入到一个 num_row 查询中,该查询在一个列表中显示所有用户,上面需要的查询计数作为显示的列之一。

我之前在没有 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     |
             ----------------------------------------------------

我需要我的查询来计算每个用户的三分之二。

4

2 回答 2

0

您的数据模型并不真正适合您要完成的任务,并且随着代码的发展添加任务需要更改数据模型,这在某种意义上是脆弱的。

我建议改为创建主/详细(或父/子)表关系。有一个包含玩家信息的表格,另一个包含任务完成信息的表格(每个玩家每个任务一行,由玩家 ID 链接)。

然后这种类型的查询就变成了对子表的非常简单的查询。

于 2012-09-11T04:01:58.450 回答
0

感谢您的帮助,但我最终使用了

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

我还弄清楚了为什么我以前的代码与 numrow 列表冲突,我i=0;在列表查询中与

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

从列计数查询。

由于所有表格为我的网站捆绑在一起的方式,我只需要以这种方式工作。再一次感谢你的帮助!

于 2012-09-12T00:12:31.787 回答