大多数人无法思考该怎么做,
我有两个数据库表。比如table_employee和table_workorder
每个员工都有一个/多个工作单。
早些时候我正在使用查询,一个用于从table_employee获取员工元组,另一个查询用于每个员工工作单计数。
SELECT * from table_employee order by " . $orderBy ." desc"
SELECT count(*) as wcount from table_workorder where employeeid = " . $table_employee.id;
我意识到没有2个DB调用,有一个可以获取结果的单个调用会很好,但是我无法构建查询框架。尝试在MySql中加上PHP
答案 0 :(得分:2)
SELECT t1.*, IFNULL(COUNT(t2.employeeid), 0) AS wcount
FROM table_employee AS t1
LEFT JOIN table_workorder AS t2 ON t2.employeeid = t1.id
GROUP BY t1.id
ORDER BY $orderBy DESC
您需要使用LEFT JOIN
,以便为没有工单的员工提供行。
以下是其工作原理:
ON t2.employeeid = t1.id
条件关联它们。LEFT JOIN
,第一个表中第二个表中没有匹配行的任何行都将放在结果集中,第二个表中的所有列都将NULL
。< / LI>
t1.id
列对这些结果进行分组,因此每个组的最终结果中都会有一行。t2.employeeid
的所有行。如步骤2中所述,没有匹配工单的员工将获得NULL
t2.employeeid
,因此不会计算在内。 NULL
,我们会使用IFNULL
将其转换为0
以获得更有用的结果。$orderBy
列排序。这正是您的查询序列所做的事情,但它都是在一个SQL查询中完成的。
这是关于SQL JOIN的一个很好的教程:
http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/