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
。