MySQL COUNT()GROUP BY - 如何将无分组列转换为数组或优先级?

时间:2012-02-10 15:23:24

标签: mysql count group-by

我的第一个问题。

我有这个问题:

SELECT *, COUNT(wishid) AS occurances FROM wishes GROUP BY productid HAVING status = 0 ORDER BY occurances DESC LIMIT 5

该表还有一个“userid”列,用于指定添加了愿望的用户。

我想创建一个最受欢迎的前5名产品列表,我需要知道当前用户希望使用哪些产品,以突出显示这些产品。

我该怎么做?如果$row['userid']在分组后成为userid-column-values的数组,我会很高兴,但似乎它只是其中一个值(可能是分组前的第一个值)。然后我可以为每一行in_array($userid, $row['userid'])

或者,如果我可以在分组之前为其他列设置优先级,那就没问题了。例如:

SELECT *, COUNT(wishid) AS occurances FROM wishes GROUP BY productid **(if column 'userid' is equal to $userid, the 'userid'-value of the grouped rows should be $userid, else whatever)** HAVING status = 0 ORDER BY occurances DESC LIMIT 5

希望你能帮忙!也许我需要一些完全不同的东西?

(顺便说一句:查询有效,但缺乏上述功能。)

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

根据MAX(IF())测试再添加一列。如果正在计数的记录的用户是相关用户的用户,则设置为1,否则,将其保留为零。现在,如果有人愿意,你在记录上有一面旗帜。

SELECT
      *, 
      COUNT(wishid) AS occurances,
      MAX( IF( userID = TheUserIDToCompareAgainst, 1, 0 )) as WishByCurrentPersonFlag
   from 
      wishes 
   GROUP BY 
      productid 
   HAVING 
      status = 0 
   ORDER BY 
      occurances DESC
   LIMIT 5