Php 一起数一行中的数字

Php 一起数一行中的数字,php,mysql,sql,Php,Mysql,Sql,我的数据库中有一个名为club的表。在club中有一行名为speler\u id,使用该speler\u id我可以获得speler\u id的值。我想一起计算这些值(因为用户有超过1个speler\u id),这是代码: $punten = 0; $sql2 = "SELECT * FROM `club` WHERE `user_id`=" . $userid ." "; $result2 = mysql_query($sql2) or die('Query failed: ' . mysq

我的数据库中有一个名为
club
的表。在
club
中有一行名为
speler\u id
,使用该
speler\u id
我可以获得
speler\u id
的值。我想一起计算这些值(因为用户有超过1个
speler\u id
),这是代码:

$punten = 0;

$sql2 = "SELECT * FROM `club` WHERE `user_id`=" . $userid ." ";
$result2 = mysql_query($sql2) or die('Query failed: ' . mysql_error());
while( $row2 = mysql_fetch_assoc( $result2)) {
    $sql = "SELECT * FROM `players_db` WHERE `id`=" . $row2['speler_id'] . " ";
    $result = mysql_query($sql) or die('Query failed: ' . mysql_error());   
    $row = mysql_fetch_assoc( $result);
    $punten += $row['xb_end_range'];
    echo $punten;
}
但当我执行这个时,它会给我所有的值,而不是总值

很抱歉,使用mySQL将很快更新到PDO或mySQLi


编辑
我找到了答案:

$sql = "SELECT SUM(xb_end_range) AS punten
    FROM club AS c
    JOIN players_db AS p ON c.speler_id = p.id
    WHERE c.user_id = $userid";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$punten = $row['punten'];

echo number_format("$punten")

通常,尽量避免在循环内执行查询。相反,加入表

$sql = "SELECT SUM(xb_end_range) AS punten
    FROM club AS c
    JOIN players_db AS p ON c.speler_id = p.id
    WHERE c.user_id = $userid";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$punten = $row['punten'];
echo $punten;

通常,尽量避免在循环内执行查询。相反,加入表

$sql = "SELECT SUM(xb_end_range) AS punten
    FROM club AS c
    JOIN players_db AS p ON c.speler_id = p.id
    WHERE c.user_id = $userid";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$punten = $row['punten'];
echo $punten;

首先,您可以手动将
club
表加入
players\u db
表,但让db为您完成这项工作,无论是在代码还是在运行时间上,效率都要高得多。其次,您正在执行手动聚合(或尝试执行),这也将由数据库更有效地执行。总的来说,您似乎希望执行如下查询:

select ifnull(sum(p.xb_end_range), 0) as punten
from
  club c
  join players_db p on p.id = c.speler_id
where c.user_id = 'the-user-id'

这将返回正好一行,其中我认为是所需的总和,作为唯一列“punten”的值。首先,您将手动将
俱乐部
表加入
玩家\u db
表,但让db为您执行这项操作将在代码和运行时间上都更加高效。其次,您正在执行手动聚合(或尝试执行),这也将由数据库更有效地执行。总的来说,您似乎希望执行如下查询:

select ifnull(sum(p.xb_end_range), 0) as punten
from
  club c
  join players_db p on p.id = c.speler_id
where c.user_id = 'the-user-id'

这将返回正好一行,其中我认为是所需的和,作为唯一列“punten”的值。您想要的内容有点模糊,但您(可能)正在寻找类似的内容:
“选择sum(xb_end_range)作为players_db WHERE id=“
如果您只想查看最终的总数,请在循环结束后放置
echo$punten
。我认为您混淆了行和列。行没有名称,
speler\u id
是列的名称。你说“有了这个
speler\u id
我可以得到
speler\u id
的值”是什么意思?你想要什么有点含糊,但你(可能)在寻找这样的东西:
“选择SUM(xb\u end\u range)作为players\u db WHERE id=“
如果您只想查看最终的总数,请在循环结束后放置
echo$punten
。我认为您混淆了行和列。行没有名称,
speler\u id
是列的名称。“使用此
speler\u id
我可以获得
speler\u id
的值”是什么意思?它永远不会返回0行。如果没有匹配项,它仍然会返回一行
punten=NULL
@Barmar,你说得很对。我已经更正了我的注释,并且进一步更新了查询,在没有匹配行的情况下返回
0
,而不是
NULL
。它将永远不会返回0行。如果没有匹配项,它仍然会返回一行
punten=NULL
@Barmar,你说得很对。我已经更正了我的注释,并且进一步更新了查询,在没有匹配行的情况下返回
0
,而不是
NULL