-1
我有这样的功能:如何获得特定标签中的顶级用户?
CREATE DEFINER=`root`@`localhost` FUNCTION `user_top_tags`(`user_id` INT, `tags_num` TINYINT(1)) RETURNS varchar(50) CHARSET utf8mb4
NO SQL
BEGIN
DECLARE top_tags varchar(50);
SELECT substring_index(group_concat(x.name ORDER BY x.tag_score DESC SEPARATOR ','), ',', tags_num) INTO top_tags
FROM (
SELECT t.name, sum(r.score) AS tag_score
FROM reputations r
JOIN qanda_tags qt ON qt.qanda_id = r.question_id
JOIN tags t ON t.id = qt.tag_id
WHERE r.owner_id = user_id
GROUP BY t.name
) x;
RETURN top_tags;
END
我这样称呼它:
SELECT u.name, user_top_tags(u.id, 3) FROM users u WHERE 1;
,并返回用户的列表与他们的前三大标签。这样的事情:
+--------+-----------------+
| Jack | php,oop,mysql |
| Martin | css,js,html |
| Peter | jquery,js,react |
+--------+-----------------+
现在我想要得到在特定标记中处于活动状态的用户。类似于SO 中的top users page(用于javascript
标记,但我想获取多个标记中的用户列表,例如IN ('css','html')
)。
现在我应该对查询进行连接吗?或者我应该修改该功能?有谁知道我该怎么做?
你可以加入你的查询。 –
@SagarGangwal是的,我想你是对的。我正在尝试......':-)'我想我必须使用'having'从句。 –
是的,如果你使用的是GROUP BY,那么HAVING是最好的选择,而不是'where'。 –