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

mnemlml8  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(390)

使用phpmyadmin,我试图使一个表“tasks”中的一列“pointsawarded”的和成为另一个表“users”中的另一列“points”的值。每个用户都会得到一个任务的积分,我希望能够有他们收到的总积分是在“用户”表列。或者在我的php数据网格中显示这些数据的另一种方法。

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

这是我使用的datagrid格式,它是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

tktrz96b

tktrz96b1#

这是一个纯粹的数据库设计问题。
考虑到 Points 如果是从另一个表计算的,则用户表上不应该有此列。你可以放下它。
这些点应该用sql计算。有多种方法可以做到这一点,这里有一个例子。
创建一个视图,根据为所有用户的任务指定的点来计算这些点。在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

你所有的问题都会解决的

相关问题