【发布时间】:2019-01-02 12:45:10
【问题描述】:
我有一个Songs 表,其中有一个likes 列,其中包含用户发送的点赞数。每个用户通过 C# 应用程序发送一个布尔值(1 或 0),该应用程序添加到 likes 列。
关于我的程序:
-
我想知道是否有更有效和简短的方法来编写函数的第 1 部分?
我必须第一次手动插入 '0' 而不是NULL才能使该功能正常工作。它不起作用,因为Likes列的初始值为NULL。当行中有NULL时,有没有办法第一次影响行? -
对于
[Users_Likes_Songs]表的函数的第 2 部分,我想更新用户是否发送了一个赞 (true = 1) 或删除它 (false = 0)。当用户的“like”必须被赋值为“1”时,我如何第一次更新这个表,而它的行完全是空的?
如果你能帮助我,我非常感谢你。
程序:
CREATE PROCEDURE Songs_Likes
@User_ID INT,
@SongID INT,
@Song_like BIT
AS
BEGIN
--- part 1 of the function
IF (@Song_like = 1)
BEGIN
UPDATE [Songs]
SET [Likes] = [Likes] + @Song_like
WHERE [Song_ID] = @SongID
END
IF (@Song_like = 0)
BEGIN
UPDATE [Songs]
SET [Likes] = [Likes] - 1
WHERE [Song_ID] = @SongID
END
--- part 2 of the function with the second table
UPDATE [Users_Likes_Songs]
SET [LikeSong] = @Song_like
WHERE ([UserID] = @User_ID) AND ([SongID] = @SongID)
END
【问题讨论】:
-
为什么需要在
Songs表中存储点赞数?您总是可以从Users_Likes_Songs表中计算出来。 -
关于您的评论 B,为什么不将
Likes的DEFAULT值设置为 0,而不是NULL?然而,理想情况下,我实际上会将喜欢的数量计算为计算值。存储在表中很容易以不正确的值结束;尤其是在比赛条件等方面。 -
@HoneyBadger,这是个好主意,但对于演示项目,我必须在没有实际用户的情况下插入“假”喜欢。
-
@sup.DR 我想说没有用户你就不可能有喜欢,即使是演示。如果您需要演示,创建假用户,让他们喜欢和不喜欢歌曲。
标签: sql sql-server sql-server-2008 if-statement boolean