我正在开发一个用于管理员工的 php 项目。
我有两个表 employee
和 department
,部门编号是两者之间的关系。 department
有一个属性,其中包含基于部门编号的员工计数。
所以我陷入困境的是我希望自动插入员 worker 数,那么你认为我应该做什么
提前致谢
最佳答案
如果您不想使用(或有权访问)触发器,但想要抽象逻辑,则可以使用 View ( docs )。
因此,假设以下数据,以及动态计算整个部门表和员 worker 数的想法,您可能会得到以下查询:
CREATE TABLE
`employees`
(
`employeeID` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(50),
`department_number` INT
);
CREATE TABLE
`departments`
(
`department_number` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(50)
);
INSERT INTO
`departments`
(`department_number`, `name`)
VALUES
(1, 'Tech Department'),
(2, 'Admin Department');
INSERT INTO
`employees`
(`name`, `department_number`)
VALUES
('John Doe', 1),
('Jane Doe', 1),
('Jimmy Doe', 2);
然后查询:
SELECT
DepartmentTbl.*,
DepartmentEmployeeTbl.employee_count
FROM
`departments` AS DepartmentTbl
LEFT JOIN
(
SELECT
`department_number`,
COUNT(`employeeID`) AS `employee_count`
FROM
`employees`
GROUP BY
`department_number`
) AS DepartmentEmployeeTbl
ON DepartmentTbl.department_number = DepartmentEmployeeTbl.department_number
给出结果:
department_number | name | employee_count
-------------------------------------------------------
1 | Tech Department | 2
2 | Admin Department | 1
SQLFiddle - http://sqlfiddle.com/#!9/3e0b54/1
因此要创建此 View ,您可以使用:
CREATE OR REPLACE VIEW `departments_employee_count` AS
SELECT
DepartmentTbl.*,
DepartmentEmployeeTbl.employee_count
FROM
`departments` AS DepartmentTbl
LEFT JOIN
(
SELECT
`department_number`,
COUNT(`employeeID`) AS `employee_count`
FROM
`employees`
GROUP BY
`department_number`
) AS DepartmentEmployeeTbl
ON DepartmentTbl.department_number = DepartmentEmployeeTbl.department_number
然后你可以将 View 称为:
SELECT
*
FROM
`departments_employee_count`
关于php - 触发器根据另一个表更新计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47180144/