Mysql

COUNT 行,其父 ID 等於我們在一個查詢中的父 ID 為 0 的行

  • January 23, 2018

我想使用 MySQL 在一個查詢中執行以下操作:

  • 抓取 parent_id 為 0 的行
  • 獲取我們抓取的 parent_id 為 0 的行的 parent_id 的所有行的計數

如何在一個查詢中完成此操作?如果您需要更多資訊,請告訴我,我很樂意盡我所能提供幫助。我不是創建問題的專家,所​​以請告訴我您還需要什麼資訊。

這是我現在正在做的一個例子:

select id from messages where parent_id=0

然後

select count(id) from messages where parent_id={{previously_chosen_id}}

如何獲得一次性查詢?就像是…

select id, count(records where parent_id=the id we just asked for)

**或者,有沒有更好的方法來處理這個問題?**你看,目前我必須執行大量查詢才能找到計數,而我寧願一次性完成。

這很容易通過內聯子查詢實現:

select  m.id,
       (select count(*) from messages where parent_id= m.id ) as ChildCount
from messages m
where m.parent_id = 0

請注意,不需要group by,因為使用了子查詢。

此查詢將為您提供所需的輸出:

SELECT
   parent.id
 , COUNT(child.id) AS child_count
FROM
            messages parent
 INNER JOIN messages child
   ON child.parent_id = parent.id
WHERE parent.parent_id = 0
GROUP BY parent.id;

您可以在 SQL Fiddle 上查看此程式碼的執行情況。

我在我的解決方案中使用了連接,而德魯津在他的解決方案中使用了相關子查詢。嘗試兩者,看看哪個在您的環境中執行得更快。MySQL 可能會將它們減少到相同的計劃。

引用自:https://dba.stackexchange.com/questions/46332