Nasıl yabancı bir tablodaki satır sayısını saymak için bir MySQL sorgu kullanın mı?

2 Cevap php

İki tablo, users ve reports var. Her kullanıcı, hiç kimse, ya da onunla ilişkili birden çok rapor vardır ve reports tablo user_id alanına sahiptir.

Ben aşağıdaki sorgu var, ve ben her satır için kullanıcının kaç rapor sayımını eklemeniz gerekir:

SELECT *
FROM users
LIMIT 1, 10

Ben bir alt sorgu kullanmanız gerekir mi, ve eğer öyleyse, nasıl yöneticileriniz kullanabilir miyim? reports tablo satırları binlerce ve binlerce var.

2 Cevap

Bir alt sorgu için gerek yok:

SELECT users.user_id, COUNT(reports.user_id) AS number_of_reports
FROM users
LEFT JOIN reports ON users.userid = reports.userid
GROUP BY users.user_id

Sorgu daha verimli hale getirmek için, her iki tabloda User_id alanlarda endeksler var emin olun

izlem yorumum: COUNT fonksiyonu boş değerlere sayılmaz, bu yüzden (beklendiği gibi) o hiç raporları (katılmak reports.user_id için bir NULL dönecekti) sahip herhangi bir kullanıcı için 0 dönersiniz. Ayrıca, bit BY GROUP eklenen unuttum çevresinde ilk kez o.

SELECT users.userid,
       SUM( IF( Reports.userid > 0, 1, 0 )) as TotRpts
   FROM 
       users LEFT JOIN reports
          ON users.userid = reports.userid;
   GROUP BY
       users.userid

Eğer () için EĞER değiştirmeniz gerekebilir

  IF( Reports.UserID is null, 0, 1 )