MYSQL - 计算包含相同数据的单行中的列

时间:2012-09-11 03:57:55

标签: mysql

我有一个包含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     |
             ----------------------------------------------------

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

2 个答案:

答案 0 :(得分:0)

您的数据模型并不真正符合您要完成的任务,并且在代码发展过程中添加任务需要更改数据模型时,它很脆弱。

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

这种类型的查询然后成为子表的一个非常简单的查询。

答案 1 :(得分:0)

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

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

我也弄清楚为什么我之前的代码与numrow列表冲突,我在列表查询中遇到了与{/ p>冲突的i=0;

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

来自列计数查询。

我必须以这种方式工作,因为我的网站所有表都绑在一起的时尚。再一次感谢你的帮助!