【问题标题】:php join and count then group and order byphp加入并计数然后分组并排序
【发布时间】:2015-05-03 06:50:05
【问题描述】:

我有两张桌子;

用户

id | username   | club 
-----------------------
1  | James5     | 2 
2  | 007        | 1 
3  | xmen       | 2 
4  | terminator | 2 

推荐用户数

 id | username | club 
----------------------
 1  | mark     |  2 
 2  | bon      |  1 
 3  | hero     |  2 
 4  | scorpio  |  2 
 5  | lame     |  5 

我如何加入这些表格以获得俱乐部的总数?例如像

这样的答案
 club   |  clubCount 
 -------------------
  2     |  6
  1     |  2 
  5     |  1 

我正在考虑以下查询;

SELECT User.club, COUNT(User.club) + COUNT(suggestedusers.club) AS clubCount FROM User, suggestedusers 
GROUP BY User.club 
ORDER BY clubCount DESC 

但上面的脚本不起作用。

【问题讨论】:

  • 使用联盟,但如果用户加入或被推荐多个俱乐部怎么办?
  • 谢谢 Strewberry 5. 一个用户只能属于一个俱乐部。如果需要,可以从一个俱乐部换到另一家具乐部,但不能同时在两个俱乐部。实际 clubCount 表示俱乐部中的用户总数和建议用户数。

标签: php mysql join count group-by


【解决方案1】:

我不清楚你的目标结果。 你可以试试这个

 Select club, count(club) as clubcount from(
      select users.id, users.username, users.club from users
       UNION
     select suggestedusers.id, suggestedusers.username, 
        suggestedusers.club from suggested users ) group by club, clubcount Order by
     clubcount desc;

【讨论】:

  • 嗨,Riyad 感谢您的评论,我试过了,但收到此错误“每个派生表都必须有自己的别名”
【解决方案2】:

假设您想要获取两张桌子每个俱乐部的用户数,这应该适合您:

SELECT  DISTINCT COALESCE(u.club, su.club) AS club
    , COALESCE(count(u.club), count(su.club)) AS clubcount
FROM    Users u

    INNER JOIN Suggestedusers su ON su.club = u.club

      GROUP BY u.club,su.club
    ORDER BY clubcount DESC

在您的代码中使用时请检查表和列的名称。

【讨论】:

  • 嗨 Nisal 我试过你的方法,它适用于分组,但 clubCount 仍然离谱,与数据库中包含的实际计数不匹配
猜你喜欢
  • 2012-10-04
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多