我的第一个问题。
我有这个问题:
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
希望你能帮忙!也许我需要一些完全不同的东西?
(顺便说一句:查询有效,但缺乏上述功能。)
答案 0 :(得分:0)
在userid字段上尝试GROUP_CONCAT
。
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
答案 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