COUNT hàng có id cha bằng với hàng chúng ta có với id cha là 0 trong một truy vấn


9

Tôi muốn thực hiện các thao tác sau trong một truy vấn bằng MySQL:

  • lấy một hàng có cha_id bằng 0
  • lấy một số lượng tất cả các hàng có cha_id của hàng mà chúng tôi đã lấy có cha_id bằng 0

Làm thế nào tôi có thể thực hiện điều này trong một truy vấn? Xin vui lòng cho tôi biết nếu bạn cần thêm thông tin, tôi sẽ sẵn lòng giúp đỡ hết mức có thể. Tôi không phải là một chuyên gia về việc tạo câu hỏi vì vậy xin vui lòng cho tôi biết bạn cần thêm thông tin gì.

Đây là một ví dụ về những gì tôi đang làm bây giờ:

select id from messages where parent_id=0

và sau đó

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

Làm thế nào để tôi có được một truy vấn một shot? Cái gì đó như...

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

Hoặc, có cách nào tốt hơn để xử lý việc này? Bạn thấy đấy, hiện tại tôi phải chạy rất nhiều truy vấn để tìm số đếm, khi tôi muốn thực hiện nó trong một lần bắn.

Câu trả lời:


6

Điều này có thể dễ dàng đạt được với một truy vấn con nội tuyến:

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

Lưu ý rằng không group bycần thiết vì một truy vấn phụ được sử dụng.


3

Truy vấn này sẽ cung cấp cho bạn đầu ra mong muốn:

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;

Bạn có thể thấy mã này hoạt động ở đây trên SQL Fiddle .

Tôi đã sử dụng một tham gia trong giải pháp của mình, trong khi druzin sử dụng một truy vấn con tương quan trong anh ta. Hãy thử cả hai và xem cái nào chạy nhanh hơn trong môi trường của bạn. MySQL có thể giảm chúng vào cùng một kế hoạch.


3

Bạn nên sử dụng LEFT JOINthay vì INNER JOINtrong trường hợp thể loại không có danh mục con.

     SELECT `parent`.`id`
          , `parent`.`name`
          , COUNT(`child`.`id`) AS `hasChild` 
       FROM `category` `parent` 
  LEFT JOIN `category` `child` 
         ON `parent`.`id` = `child`.`parent_id` 
      WHERE `parent`.`parent_id` = 3780 
   GROUP BY `parent`.`id`

Làm thế nào để bạn đếm hàng con tuân thủ một số điều kiện? truy vấn phụ?
Enrique
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.