[英]MySql get count(*) with a join from a table
通常無法思考該怎么做,
我有兩個數據庫表。 說出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調用,最好有一個可以獲取我結果的調用,但是我無法構建查詢。 在結合PHP的MySql中嘗試
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
條件將它們ON t2.employeeid = t1.id
。 LEFT JOIN
,因此第一個表中的任何行,而第二個表中沒有匹配的行,都將放入結果集中,第二個表中的所有列都為NULL
。 t1.id
列t1.id
,因此每組的最終結果中將只有一行。 t2.employeeid
的行進行計數。 如第2步所述,沒有匹配工作訂單的員工的t2.employeeid
將會為NULL
,因此不會被計入。 NULL
,因此我們使用IFNULL
將其轉換為0
以獲得更有用的結果。 $orderBy
列排序。 這正是您的查詢序列所要做的,但是都是通過一個SQL查詢完成的。
這是有關SQL JOIN的很好的教程:
http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.