我正在制定一个系统,其中一些快递员可能会要求他们的首选旅行。如果有多名员工要求参加特定的旅行,我想先把它交给那个开始为我们工作的人。我想在概述页面上显示一个笑脸或其他内容,如
我试了几个小时,但是我无法获得它的MySQL代码。 我有3个相关的表格。
我想选择所有旅行,包括他们的详细信息 - >易
我想(至少)添加另一个字段来计算该巡视中的请求以进行进一步查询。我想我需要使用1. query
中的tourid
进行选择
最好的是一个查询,包括带结果的if-else语句,如果游览可用,tourid
后面的字段将为NULL,或者显示请求该游览的最老员工的进入日期如果请求帐户> 0
我非常感谢你的任何建议!
谢谢!
答案 0 :(得分:0)
要选择所有旅行,包括他们的详细信息,您只需
Select * from Tours;
现在,您可以向Tours表中添加一个名为count
的字段,该字段可跟踪该特定tourID的所有传入请求。
优选地,每当在Request表中进行更改时,保持触发器更新count的值,即,如果发出新请求,或者修改/删除旧请求。
或者,您可以选择不存储该值,而是执行
Select count(employeeID) from Requests, Tours where Requests.tourID = Tours.tourID;
现在,对于这些员工中的每一位,您希望获得最早的加入日期。
Select min(date_of_entry) from Employees where employeeID in (Select count(employeeID) from Requests, Tours where Requests.tourID = Tours.tourID);
我不明白你对#id;"后面的字段是什么意思,但我希望这至少可以部分回答你的问题。
答案 1 :(得分:0)
2)我想(至少)添加另一个字段来计算请求 参观进一步的查询。我想我需要一个带有tourid的选择 1。
SELECT R.tourid, COUNT(R.tourid)
FROM Requests R
GROUP BY R.tourid;
添加字段以跟踪汇总信息会使事情变得更加复杂(需要例如触发器),并且原则上会过早优化。
3)Optimum将是一个包含if-else语句的查询 结果,如果游览的话,tourid后面的字段将为NULL 可用或显示最老员工的入职日期 如果请求人数> gt,请求参观。 0
SELECT T.tourid, RE.min_date_of_entry
FROM Tours T
LEFT OUTER JOIN (
SELECT R.tourid, MIN(E.date_of_entry) AS min_date_of_entry
FROM Requests R
INNER JOIN Employees E ON E.employeeid = R.employeeid
GROUP BY R.tourid
) RE ON RE.tourid = T.tourid;
在编写SQL时,您应该尽可能使用关联逻辑运算符(如连接)而不是条件数等命令式工具。在这种情况下,LEFT OUTER JOIN
只会在NULL
(RE
中没有匹配时从RE
获取INNER JOIN
个值。 ,如果没有匹配,将跳过行)。请注意,如果您计划使用最短入境日期来确定请求员工,则必须处理极端案件。例如,如果员工的入职日期相同,会发生什么?