1

用户:

uid int(11) - userid(primary key, auto_increment)
name varchar(255)
pass varchar(64)
created int(11)

项目:

pid int(11) .....
name varchar(150)
description varchar(255)
created int(11)

用户项目:

uid int(11) - user id
pid int(11) - product id

如何选择分配给它的用户最多的项目?

sql查询。

4

3 回答 3

3

你可以使用这样的东西:

select p.pid, 
  p.name,
  up.TotalUsers
from projects p
inner join
(
  select pid, count(uid) TotalUsers
  from users_projects
  group by pid
) up
  on p.pid = up.pid
order by TotalUsers Desc
-- limit 1

请参阅带有演示的 SQL Fiddle

这将返回所有项目的列表和每个项目的总用户数。如果您想返回项目将最多的用户,那么您将包括limit 1被注释掉的那个。

如果您有多个project用户具有相同数量的用户,那么您可能需要使用类似于以下内容的内容:

select p.pid, 
  p.name,
  up.TotalUsers
from projects p
inner join
(
  select pid, count(uid) TotalUsers
  from users_projects
  group by pid
) up
  on p.pid = up.pid
where totalusers = (select count(*) Total
                    from users_projects
                    group by pid
                    order by total desc
                    limit 1)

请参阅带有演示的 SQL Fiddle

感谢@JW的小提琴

于 2013-02-11T12:39:41.123 回答
1

以下查询将包括具有相同用户数的多个项目,并且恰好是用户数最多的项目。

SELECT  a.name userName, c.name ProjectName
FROM    users a
        INNER JOIN users_projects b
            ON a.uid = b.uid
        INNER JOIN projects c
            ON b.pid = c.pid
        INNER JOIN
        (
            SELECT  pid, COUNT(*) totalCount
            FROM    users_projects
            GROUP   BY pid
            HAVING  COUNT(*) = (SELECT COUNT(*) x 
                                FROM users_projects 
                                GROUP BY pid 
                                ORDER BY x DESC 
                                LIMIT 1)
        ) d ON b.pid = d.pid
ORDER   BY a.Name ASC
于 2013-02-11T12:41:06.377 回答
0

如果您只寻找一个项目,以下是最快的方法:

select project_id, count(*) as NumUsers
from user_projects
group by project_id
order by count(*) desc
limit 1

(我假设“产品”=“项目”)。

于 2013-02-11T14:29:23.800 回答