1

背景:我目前正在开发一个简单的在线测验。在用户回答了一个简单的问题后,用户就有机会通过做一些小任务来提高获胜的机会。

用户赚取的每一手都插入到单独的行中,因此当我需要找到“随机”手时,他们中奖的机会就会增加(如果我错了,请纠正我)。

来自批次表的样本数据:

LotId      ParticipantId      Created
1          1                  2012-11-16 12:00:00
2          2                  2012-11-16 12:02:00    
3          2                  2012-11-16 12:06:00 
4          2                  2012-11-16 12:15:00    
5          3                  2012-11-16 12:16:00

这意味着 ParticipantId 为 2 的参与者拥有三手,因此与其他参与者相比,在统计上获胜的机会更大。

我需要做的:当我需要抽中奖时,我会从手数表中随机选择一个手数。在此之后,我需要找到有关获胜者的信息。

目前我在 SELECT 之后使用这个(任何关于改进 SELECT 的评论都值得赞赏),然后在我的代码中我有另一个 SELECT 与用户的信息。

SELECT TOP 1 LotId, ParticipantId FROM Sample_Lots WITH (NOLOCK)
WHERE
    CAST(Created AS DATE) = '2012-11-16'
    AND
    ParticipantId NOT IN
    (
        SELECT ParticipantId FROM Sample_Winners WITH (NOLOCK)
        WHERE
            ParticipantId IS NOT NULL
            AND
            CAST(ThisDate AS DATE) = '2012-11-16'
    )
    AND
    ParticipantId IN
    (
        SELECT ParticipantId FROM Sample_Participants WITH (NOLOCK)
        WHERE
            ParticipationConfirmed IS NOT NULL
    )
ORDER BY NEWID()

我无法解决这个问题。我需要一个随机批次,并且从这个随机批次中我需要在同一个 SELECT 中获取用户的信息。有任何想法吗?

4

2 回答 2

0

假设您的用户信息位于名为 Participants 的表中,其中包含 ParticipantId、FirstName 和 LastName 列,下面是一个使用 JOIN 到该表的示例:

SELECT TOP 1 sl.LotId, sl.ParticipantId, p.FirstName, p.LastName 
FROM Sample_Lots sl 
INNER JOIN Participants p ON sl.ParticipantId = p.ParticipantId WITH (NOLOCK)
WHERE
    CAST(Created AS DATE) = '2012-11-16'
    AND
    sl.ParticipantId NOT IN
    (
        SELECT ParticipantId FROM Sample_Winners WITH (NOLOCK)
        WHERE
            ParticipantId IS NOT NULL
            AND
            CAST(ThisDate AS DATE) = '2012-11-16'
    )
    AND
    sl.ParticipantId IN
    (
        SELECT ParticipantId FROM Sample_Participants WITH (NOLOCK)
        WHERE
            ParticipationConfirmed IS NOT NULL
    )
ORDER BY NEWID()
于 2012-11-16T15:34:00.780 回答
0

在您的第一个选择中,将 Sample_Lots 左连接到 ParticipantId 列上的 Participant 表。然后在您的第一个选择中,您还可以获得有关参与者的详细信息。结果将具有与原始选择相同的行数,并且将随机排序。

于 2012-11-16T15:38:20.870 回答