phpmyadmin 中一列作为另一列的总和
Sum of one column as another column in phpmyadmin
使用 phpmyadmin 我试图将一列 "PointsAwarded" 中的一列 table "tasks" 的总和作为另一列中的值 "points"在另一个 table "users" 中。每个用户都会为一项任务获得积分,我希望能够让他们获得的总积分成为 "user" table 中的一列。或者在我的 php 数据网格中显示此数据的替代方法。
new C_DataGrid("SELECT id, FirstName, LastName, Points FROM users", "id",
"Ranking");
这是我正在使用的数据网格的格式,它是 php网格格式。非常感谢任何帮助,如果您需要任何进一步的信息,请询问。
这是ranking.php页面
<?php
// use phpGrid\C_DataGrid;
include_once("../phpGrid/conf.php");
include_once('../inc/head.php');
?>
<h1><a href="../index.php">Staff Rank - Project Management System</a></h1>
<?php
$_GET['currentPage'] = 'ranking';
include_once('../inc/menu.php');
?>
<h3>Ranking</h3>
<?php
$dgRank = new C_DataGrid("SELECT id, FirstName, LastName, Points FROM
users", "id", "Ranking");
$dgRank->set_col_hidden('id');
$dgRank-> set_sortname('id');
$dgRank->enable_edit();
$dgRank -> display();
?>
<?php
include_once('../inc/footer.php');
?>
数据库相册Structure/Relationshiphttps://imgur.com/a/DGPkDPa
数据库与应用相册:https://imgur.com/a/NKrDLLx
这纯粹是数据库设计问题。
考虑到 Points
是从另一个 table 计算得出的,您的用户 table 不应包含此列。你可以放弃它。
应在 SQL 中计算点数。有多种方法可以做到这一点,这里有一个例子。
创建一个 VIEW,根据他们的任务获得的 PointsAwarded 计算所有用户的分数。
在 phpmyadmin 中启动此查询:
CREATE VIEW User_Points AS
SELECT u.id, SUM(COALESCE(t.PointsAwarded,0)) AS Points
FROM users
LEFT JOIN tasks t ON u.id=t.EmployeeID
GROUP BY u.id
现在你可以做一个 SELECT * FROM User_points
,这将 return 像这样:
id Points
1 48
2 0
3 256
4 125
id 是用户的 id。
现在在 PHP 中,将您的查询更改为:
SELECT u.id, u.FirstName, u.LastName, p.Points FROM users u INNER JOIN User_points p ON u.id=p.id
你所有的问题都将得到解决
使用 phpmyadmin 我试图将一列 "PointsAwarded" 中的一列 table "tasks" 的总和作为另一列中的值 "points"在另一个 table "users" 中。每个用户都会为一项任务获得积分,我希望能够让他们获得的总积分成为 "user" table 中的一列。或者在我的 php 数据网格中显示此数据的替代方法。
new C_DataGrid("SELECT id, FirstName, LastName, Points FROM users", "id",
"Ranking");
这是我正在使用的数据网格的格式,它是 php网格格式。非常感谢任何帮助,如果您需要任何进一步的信息,请询问。
这是ranking.php页面
<?php
// use phpGrid\C_DataGrid;
include_once("../phpGrid/conf.php");
include_once('../inc/head.php');
?>
<h1><a href="../index.php">Staff Rank - Project Management System</a></h1>
<?php
$_GET['currentPage'] = 'ranking';
include_once('../inc/menu.php');
?>
<h3>Ranking</h3>
<?php
$dgRank = new C_DataGrid("SELECT id, FirstName, LastName, Points FROM
users", "id", "Ranking");
$dgRank->set_col_hidden('id');
$dgRank-> set_sortname('id');
$dgRank->enable_edit();
$dgRank -> display();
?>
<?php
include_once('../inc/footer.php');
?>
数据库相册Structure/Relationshiphttps://imgur.com/a/DGPkDPa
数据库与应用相册:https://imgur.com/a/NKrDLLx
这纯粹是数据库设计问题。
考虑到 Points
是从另一个 table 计算得出的,您的用户 table 不应包含此列。你可以放弃它。
应在 SQL 中计算点数。有多种方法可以做到这一点,这里有一个例子。
创建一个 VIEW,根据他们的任务获得的 PointsAwarded 计算所有用户的分数。 在 phpmyadmin 中启动此查询:
CREATE VIEW User_Points AS
SELECT u.id, SUM(COALESCE(t.PointsAwarded,0)) AS Points
FROM users
LEFT JOIN tasks t ON u.id=t.EmployeeID
GROUP BY u.id
现在你可以做一个 SELECT * FROM User_points
,这将 return 像这样:
id Points
1 48
2 0
3 256
4 125
id 是用户的 id。
现在在 PHP 中,将您的查询更改为:
SELECT u.id, u.FirstName, u.LastName, p.Points FROM users u INNER JOIN User_points p ON u.id=p.id
你所有的问题都将得到解决