一列的总和作为phpmyadmin

时间:2018-05-06 07:07:16

标签: php mysql sql phpgrid

使用phpmyadmin我试图将一列的总和与#34; PointsAwarded"在一个表"任务"是另一列中的值"点"在另一个表"用户"。每个用户都将获得一个任务的积分,我希望能够将他们收到的总积分作为"用户"中的一列。表。或者在我的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

1 个答案:

答案 0 :(得分:1)

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

考虑到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

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