-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'。 –