如何 return 获得所有积分的列表和 add/remove 角色
How to return a list of all points earned and add/remove a role
我已经建立了一个基于反应的投票系统,它允许我的不和谐服务器中的用户投票给某人,并且根据给予他们的投票,他们将获得 x 点数,例如 5 星评级给出 10 分。
然后将所有这些数字连同投票给他们的人一起添加到 SQL-Server 数据库中,然后 DateTime
投票。
我现在想弄清楚的是我如何 add/remove 为被投票的人扮演角色。例如,一旦成员获得 100 分,他们就会被分配 X 角色,如果他们低于 100 分,则删除该角色。
我正在努力弄清楚我将如何编写 SQL Function
来获取这些信息 - 我想我将有足够的信心编写 c# 来伴随这个。
我的 Table 中的字段是
- Sherpa - 被投票的人
- VotedBy - 投票者
- 日期 - 投票日期
- 点数 - 获得的点数
数据如何存储到数据库的示例
var message = (RestUserMessage) await channel.GetMessageAsync(SherpaReact.CatchReaction);
if (reaction.MessageId == SherpaReact.CatchReaction && reaction.UserId == SherpaReact.UserReaction) {
SqlCommand command;
command = new SqlCommand($ @ "EXECUTE dbo.AddSherpa @Points = @@Points, @Sherpa = @@Sherpa, @VotedBy = @@VotedBy, @Date = @@Date", StaticObjects._connection);
if (reaction.Emote.Name == "1\u20e3") {
await message.DeleteAsync();
SqlParameter PointsParam = new SqlParameter {
ParameterName = "@@Points",
Value = (long) - 8
};
command.Parameters.Add(PointsParam);
SqlParameter SherpaParam = new SqlParameter {
ParameterName = "@@Sherpa",
Value = (long) SherpaReact.Sherpa.Id
};
command.Parameters.Add(SherpaParam);
SqlParameter VotedByParam = new SqlParameter {
ParameterName = "@@VotedBy",
Value = (long) SherpaReact.UserReaction
};
command.Parameters.Add(VotedByParam);
SqlParameter DateParam = new SqlParameter {
ParameterName = "@@Date",
Value = DateTime.Now
};
command.Parameters.Add(DateParam);
command.ExecuteNonQuery();
var sherpa = SherpaReact.Sherpa.Nickname.Contains("(") ? SherpaReact.Sherpa.Nickname.Substring(0, SherpaReact.Sherpa.Nickname.IndexOf("(") - 1) : SherpaReact.Sherpa.Nickname;
EmbedBuilder eb = new EmbedBuilder() {
Title = "Vote Accepted",
Description = $ "Thanks for voting for {sherpa}",
Color = new Color(127, 127, 0)
};
IUserMessage msg = await channel.SendMessageAsync(embed: eb.Build());
_ = Task.Run(() => DeleteMessagesAsync(msg));
}
我已经做了一个简单的函数,只是为了 return 夏尔巴协作到目前为止收到的所有点的总和,但我无法理解下一步该怎么做如果有人能指出我正确的方向,我们将不胜感激。
CREATE FUNCTION [dbo].[GetSherpaPoints]
(
)
RETURNS @returntable TABLE
(
Sherpa BIGINT,
Points BIGINT
)
AS
BEGIN
INSERT @returntable
SELECT
[Sherpa],
SUM([Points]) AS [PointsSum]
FROM
[dbo].[SherpaVotes]
WHERE
[Sherpa] = Sherpa
GROUP BY
[Sherpa]
ORDER BY
[PointsSum] DESC
RETURN
END
你可以用一个案例做点什么:
SELECT
Sherpa,
CASE
WHEN Points < 100 THEN 'NoRole'
WHEN Points >= 100 AND Points < 200 THEN 'Role1'
WHEN Points >= 200 AND Points < 300 THEN 'Role2' -- And so on...
END as Role
FROM @Results;
对于尽量少的角色。
如果你有很多,你应该创建一个角色 table 并相应地计算它的最小值和最大值。
编辑:
这应该按照您的评论工作
CREATE FUNCTION [dbo].[GetSherpaPoints]
(
)
RETURNS @returntable TABLE
(
Sherpa BIGINT,
Role nvarchar(20)
)
AS
BEGIN
INSERT @returntable
SELECT
[Sherpa],
CASE
WHEN SUM(Points) < 100 THEN 'NoRole'
WHEN SUM(Points) >= 100 AND SUM(Points) < 200 THEN 'Role1'
WHEN SUM(Points) >= 200 AND SUM(Points) < 300 THEN 'Role2' -- And so on...
END as Role
FROM
[dbo].[SherpaVotes]
WHERE
[Sherpa] = Sherpa
GROUP BY
[Sherpa]
ORDER BY
[PointsSum] DESC
RETURN
END
我已经建立了一个基于反应的投票系统,它允许我的不和谐服务器中的用户投票给某人,并且根据给予他们的投票,他们将获得 x 点数,例如 5 星评级给出 10 分。
然后将所有这些数字连同投票给他们的人一起添加到 SQL-Server 数据库中,然后 DateTime
投票。
我现在想弄清楚的是我如何 add/remove 为被投票的人扮演角色。例如,一旦成员获得 100 分,他们就会被分配 X 角色,如果他们低于 100 分,则删除该角色。
我正在努力弄清楚我将如何编写 SQL Function
来获取这些信息 - 我想我将有足够的信心编写 c# 来伴随这个。
我的 Table 中的字段是
- Sherpa - 被投票的人
- VotedBy - 投票者
- 日期 - 投票日期
- 点数 - 获得的点数
数据如何存储到数据库的示例
var message = (RestUserMessage) await channel.GetMessageAsync(SherpaReact.CatchReaction);
if (reaction.MessageId == SherpaReact.CatchReaction && reaction.UserId == SherpaReact.UserReaction) {
SqlCommand command;
command = new SqlCommand($ @ "EXECUTE dbo.AddSherpa @Points = @@Points, @Sherpa = @@Sherpa, @VotedBy = @@VotedBy, @Date = @@Date", StaticObjects._connection);
if (reaction.Emote.Name == "1\u20e3") {
await message.DeleteAsync();
SqlParameter PointsParam = new SqlParameter {
ParameterName = "@@Points",
Value = (long) - 8
};
command.Parameters.Add(PointsParam);
SqlParameter SherpaParam = new SqlParameter {
ParameterName = "@@Sherpa",
Value = (long) SherpaReact.Sherpa.Id
};
command.Parameters.Add(SherpaParam);
SqlParameter VotedByParam = new SqlParameter {
ParameterName = "@@VotedBy",
Value = (long) SherpaReact.UserReaction
};
command.Parameters.Add(VotedByParam);
SqlParameter DateParam = new SqlParameter {
ParameterName = "@@Date",
Value = DateTime.Now
};
command.Parameters.Add(DateParam);
command.ExecuteNonQuery();
var sherpa = SherpaReact.Sherpa.Nickname.Contains("(") ? SherpaReact.Sherpa.Nickname.Substring(0, SherpaReact.Sherpa.Nickname.IndexOf("(") - 1) : SherpaReact.Sherpa.Nickname;
EmbedBuilder eb = new EmbedBuilder() {
Title = "Vote Accepted",
Description = $ "Thanks for voting for {sherpa}",
Color = new Color(127, 127, 0)
};
IUserMessage msg = await channel.SendMessageAsync(embed: eb.Build());
_ = Task.Run(() => DeleteMessagesAsync(msg));
}
我已经做了一个简单的函数,只是为了 return 夏尔巴协作到目前为止收到的所有点的总和,但我无法理解下一步该怎么做如果有人能指出我正确的方向,我们将不胜感激。
CREATE FUNCTION [dbo].[GetSherpaPoints]
(
)
RETURNS @returntable TABLE
(
Sherpa BIGINT,
Points BIGINT
)
AS
BEGIN
INSERT @returntable
SELECT
[Sherpa],
SUM([Points]) AS [PointsSum]
FROM
[dbo].[SherpaVotes]
WHERE
[Sherpa] = Sherpa
GROUP BY
[Sherpa]
ORDER BY
[PointsSum] DESC
RETURN
END
你可以用一个案例做点什么:
SELECT
Sherpa,
CASE
WHEN Points < 100 THEN 'NoRole'
WHEN Points >= 100 AND Points < 200 THEN 'Role1'
WHEN Points >= 200 AND Points < 300 THEN 'Role2' -- And so on...
END as Role
FROM @Results;
对于尽量少的角色。 如果你有很多,你应该创建一个角色 table 并相应地计算它的最小值和最大值。
编辑: 这应该按照您的评论工作
CREATE FUNCTION [dbo].[GetSherpaPoints]
(
)
RETURNS @returntable TABLE
(
Sherpa BIGINT,
Role nvarchar(20)
)
AS
BEGIN
INSERT @returntable
SELECT
[Sherpa],
CASE
WHEN SUM(Points) < 100 THEN 'NoRole'
WHEN SUM(Points) >= 100 AND SUM(Points) < 200 THEN 'Role1'
WHEN SUM(Points) >= 200 AND SUM(Points) < 300 THEN 'Role2' -- And so on...
END as Role
FROM
[dbo].[SherpaVotes]
WHERE
[Sherpa] = Sherpa
GROUP BY
[Sherpa]
ORDER BY
[PointsSum] DESC
RETURN
END