SQL:按行数排序(使用COUNT?)

Aar*_*ber 1 sql count sql-order-by selected

对于SMF,我正在为我的部落成员制作一个名单(请不要带"你应该问SMF",因为这完全不相关;这只是上下文信息).

我需要它来选择所有成员(来自smf_members)并根据他们在smf_permissions中拥有多少权限来排序(因此脚本可以确定谁的等级更高).您可以使用以下方法检索有多少权限:COUNT(permission) FROM smf_permissions.

我现在正在使用这个SQL:

SELECT DISTINCT(m.id_member), m.real_name, m.date_registered  
FROM smf_members AS m, smf_permissions AS p  
WHERE m.id_group=p.id_group  
ORDER BY COUNT(p.permission)
Run Code Online (Sandbox Code Playgroud)

然而,这只会返回一个排!如何返回行?

干杯,Aart

Mar*_*ith 5

你需要一个GROUP BY.我也用显式JOIN语法重写了.LEFT JOIN如果要包含权限为零的成员,则可能需要更改为.

SELECT m.id_member,
       m.real_name,
       m.date_registered,
       COUNT(p.permission) AS N
FROM   smf_members AS m
       JOIN smf_permissions AS p
         ON m.id_group = p.id_group
GROUP  BY m.id_member,
          m.real_name,
          m.date_registered
ORDER  BY COUNT(p.permission)  
Run Code Online (Sandbox Code Playgroud)