簡體   English   中英

MySQL從表中獲取計數(*)與聯接

[英]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以便為沒有工作訂單的員工獲得行。

運作方式如下:

  1. JOIN在兩個表之間創建叉積,並使用ON t2.employeeid = t1.id條件將它們ON t2.employeeid = t1.id
  2. 由於它是LEFT JOIN ,因此第一個表中的任何行,而第二個表中沒有匹配的行,都將放入結果集中,第二個表中的所有列都為NULL
  3. 它將這些結果按t1.idt1.id ,因此每組的最終結果中將只有一行。
  4. 對於每個組,它將對所有非t2.employeeid的行進行計數。 如第2步所述,沒有匹配工作訂單的員工的t2.employeeid將會為NULL ,因此不會被計入。
  5. 由於如果未找到任何內容,此計數將為NULL ,因此我們使用IFNULL將其轉換為0以獲得更有用的結果。
  6. 最終結果按$orderBy列排序。

這正是您的查詢序列所要做的,但是都是通過一個SQL查詢完成的。

這是有關SQL JOIN的很好的教程:

http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM