php - phpmyadmin 中一列与另一列的总和

标签 php mysql sql phpgrid

使用 phpmyadmin,我试图使一个表“tasks”中的一列“PointsAwarded”的总和成为另一个表“users”中另一列“points”的值。每个用户都会获得一项任务的积分,我希望能够将他们收到的总积分作为“用户”表中的一列。或者在我的 php 数据网格中显示此数据的替代方法。

new C_DataGrid("SELECT id, FirstName, LastName, Points FROM users", "id", 
"Ranking");

这是我正在使用的数据网格的格式,它是 phpGrid 格式。非常感谢任何帮助,您需要的任何进一步信息只需询问。

这里是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');
?>

数据库结构/关系图册https://imgur.com/a/DGPkDPa

数据库及应用相册:https://imgur.com/a/NKrDLLx

最佳答案

这纯粹是数据库设计问题。

考虑到 Points 是根据另一个表计算的,因此您的用户表中不应包含此列。您可以删除它。

这些点应该用 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,这将返回如下内容:

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

您的所有问题都将得到解决

关于php - phpmyadmin 中一列与另一列的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50197110/

相关文章:

mysql - 我可以使用 CSV 选项导入 CSV 文件,但不适用于使用 LOAD DATA 的 CSV

sql - 获得简单的成员(member)资格以使用 azure 网站

javascript - codeigniter ajax 中的 gzip 压缩不起作用

php - 开发多语言系统

java - JPA 条件插入

mysql - 如何使用Mysql查询1列中的多个值

mysql - 如何从表中获取最低值

java - SQLite 查询 - 出现多次并按出现次数排序的单个记录的简短列表?

php - PHP中的JSON数组三个mysql表

php - 使用PHP错误查看存储在MySQL数据库中的PDF文件