写一个sql查询,展示系统中总部各部门每个人的参会次数、参会角色和参会共计时长。并且写一个前端页面将查询结果展示出来。
时间: 2024-03-21 19:39:58 浏览: 112
好的,以下是一个SQL查询语句可以展示系统中总部各部门每个人的参会次数、参会角色和参会共计时长:
```
SELECT dept.name AS 部门名称, emp.name AS 姓名,
COUNT(meeting.id) AS 参会次数,
GROUP_CONCAT(DISTINCT role.name ORDER BY role.id SEPARATOR ', ') AS 参会角色,
SUM(TIMESTAMPDIFF(MINUTE, meeting.start_time, meeting.end_time)) AS 参会时长
FROM meeting_participant
JOIN meeting ON meeting_participant.meeting_id = meeting.id
JOIN employee emp ON meeting_participant.employee_id = emp.id
JOIN department dept ON emp.department_id = dept.id
JOIN meeting_role role ON meeting_participant.role_id = role.id
WHERE dept.parent_id IS NULL
GROUP BY dept.id, emp.id;
```
这个查询语句假设系统中的部门采用树形结构,总部的部门 `parent_id` 为 NULL。查询结果将按照部门名称和姓名分组,显示每个人参会的次数、角色和总时长。其中,`GROUP_CONCAT` 函数将每个人在不同会议中担任的角色用逗号分隔并拼接成一个字符串。`TIMESTAMPDIFF` 函数计算参会时长,单位为分钟。
接下来,以下是一个基本的HTML和JavaScript代码示例,用于将查询结果显示在前端页面上:
```html
<!DOCTYPE html>
<html>
<head>
<title>查询结果展示</title>
<style>
table, th, td {
border: 1px solid black;
border-collapse: collapse;
padding: 5px;
}
</style>
</head>
<body>
<h1>参会统计</h1>
<table id="resultTable">
<thead>
<tr>
<th>部门名称</th>
<th>姓名</th>
<th>参会次数</th>
<th>参会角色</th>
<th>参会时长</th>
</tr>
</thead>
<tbody>
<!-- 这里将动态生成表格内容 -->
</tbody>
</table>
<script>
// 使用 AJAX 请求后端 API 获取查询结果
var xhr = new XMLHttpRequest();
xhr.open("GET", "/api/meeting-stats");
xhr.onload = function() {
if (xhr.status === 200) {
var queryResult = JSON.parse(xhr.responseText);
// 通过 JavaScript 动态生成表格内容
var tbody = document.querySelector("#resultTable tbody");
queryResult.forEach(function(rowData) {
var row = document.createElement("tr");
Object.keys(rowData).forEach(function(key) {
var cell = document.createElement("td");
cell.textContent = rowData[key];
row.appendChild(cell);
});
tbody.appendChild(row);
});
} else {
console.error(xhr.statusText);
}
};
xhr.onerror = function() {
console.error(xhr.statusText);
};
xhr.send();
</script>
</body>
</html>
```
这个示例使用 AJAX 请求后端 API `/api/meeting-stats` 获取查询结果,并通过 JavaScript 动态生成表格内容。请注意,这只是一个基本示例,您需要根据您的实际需求进行修改和定制化,并且需要在后端实现 `/api/meeting-stats` 的 API 接口。
阅读全文