Используя phpmyadmin, я пытаюсь сделать сумму одного столбца «PointsAwarded» в одной таблице «tasks» значениями в другом столбце «points» в другой таблице «users». Каждый пользователь получит баллы за задание, я хочу, чтобы сумма полученных им баллов была столбцом в таблице «user». Или альтернативный способ показать эти данные в моем php datagrid.
new C_DataGrid("SELECT id, FirstName, LastName, Points FROM users", "id",
"Ranking");
это формат таблицы данных, которую я использую, это формат phpGrid. Любая помощь высоко ценится, и любую дополнительную информацию вам нужно просто спросить.
Вот страница rating.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. Есть несколько способов сделать это, и вот пример.
Создайте ВИД, который вычисляет баллы для всех пользователей, основываясь на Баллах, начисленных за их задачи.
Запустите этот запрос в 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 является идентификатором пользователя.
Теперь в PHP измените ваш запрос на это:
SELECT u.id, u.FirstName, u.LastName, p.Points FROM users u INNER JOIN User_points p ON u.id=p.id
и все ваши проблемы будут решены
Других решений пока нет …