SQL存储过程

| 我有3张桌子:
tbl_Image
,将从中获得所有图像的列表 一个
user
表,将从中获取用户ID 以及Image和Member的关联表table2ѭ。 我的工作流程是用户可以上传图像,并将其存储到图像表中。然后,所有用户都可以查看该图像并选择与图像一起提供的三个选项之一。如果用户选择一个选项,它将被添加到关联表中。没有用户可以观看同一图像多次。因此,多个条目将不存在。 现在,我想通过让成员列表选择相同的选项和与他们为其提供选项的所有常见图像相对应的不同选项来找到匹配百分比。 即说3个用户说A,B和C查看tajmahal的图像。如果A和B选择漂亮作为选择,而C选择“不好”。对于另一个图像,说印度国旗A,B和C选择与“致敬”相同。然后,对于用户A:B具有100%匹配(因为他们两次都选择了相同的选项)。对于A:C具有50%的匹配率,其中2个相同。 所以这是我的情况,在这种情况下,我必须找到与当前登录用户相对应的所有匹配项。 请帮助我。。。。。。     
已邀请:
        我对表的实际结构做了一些假设,但是如果我了解您要查找的内容,那么我认为此查询将获得您想要的结果。您可能需要进行一些修改以匹配您的表结构。
    SELECT
        matches.UserName,
        CAST(matches.SameRatings AS FLOAT) / CAST(ratings.UserRatingCount AS FLOAT) AS MatchPercent
    FROM 
        tbl_User
    CROSS APPLY
    (
        SELECT
            COUNT(*) UserRatingCount
        FROM 
            tbl_MemberAssociation
        WHERE 
            UserId = tbl_User.UserId
    ) ratings
    CROSS APPLY
    (
        SELECT
            u1.UserId,
            u1.UserName,
            COUNT(*) AS SameRatings
        FROM 
            tbl_MemberAssociation ma
        INNER JOIN 
            tbl_MemberAssociation ma1 
        ON
            ma.ImageId = ma1.ImageId 
        AND ma.Rating = ma1.Rating 
        AND ma.UserId <> ma1.UserId
        INNER JOIN 
            tbl_User u1 
        ON 
            ma1.userId = u1.UserId
        WHERE 
            ma.UserId = tbl_User.UserId
        GROUP BY
            u1.UserId,
            u1.UserName
    ) matches
    WHERE
        tbl_User.UserId = @UserId
    ORDER BY
        MatchPercent DESC
@UserId可以作为输入传递给存储过程。 第一个CROSS APPLY \“ ratings \”将为已登录用户的评分总数计数。 第二个CROSS APPLY \“ matches \”将获得数据库中其他用户的相似评分数量的计数。 结果集使用两个CROSS APPLY查询计算出的计数来计算已登录用户与已为该已登录用户评分相同图像的其他用户之间的匹配百分比。     

要回复问题请先登录注册