能否请您帮助我构建sql查询以获取特定帖子的所有信息,并且我需要对所有帖子进行相同操作 而我需要的第二个选项是,如果当前登录的用户已经喜欢该特定帖子,则我需要具有一个true或false布尔值。
我想同时加入表格并获得特定帖子的喜欢总数,以及当前用户是否喜欢该帖子
帖子点赞表
Id PostId LikedBy LikedOn
9B0B2DEB-47CE-4F6E-B892-35D2F2D3F543 480149F2-BCF4-40F4-3C19-08D7DFC7C616 0F8FAD5B-D9CB-469F-A165-70867728950E 2020-04-15 23:08:26.567
40E7C5F4-AD42-4A22-8BC0-5B0C9F125427 480149F2-BCF4-40F4-3C19-08D7DFC7C616 0F8FAD5B-D9CB-469F-A165-70867728950E 2020-04-15 23:08:10.530
C132E64E-C9A2-471E-9DD9-CB9A342D2DBE 6B989E93-10FE-4131-38B4-08D7DC6856B4 0F8FAD5B-D9CB-469F-A165-70867728950E 2020-04-16 11:43:46.730
32099959-DB24-42F0-A629-F0991163509A 480149F2-BCF4-40F4-3C19-08D7DFC7C616 0F8FAD5B-D9CB-469F-A165-70867728950E 2020-04-15 22:49:44.557
AA606CFF-EAC0-4010-A673-FF682D46AB80 480149F2-BCF4-40F4-3C19-08D7DFC7C616 0F8FAD5B-D9CB-469F-A165-70867728950E 2020-04-16 11:43:54.587
所有帖子
Id Title UserId Post
6B989E93-10FE-4131-38B4-08D7DC6856B4 great 0F8FAD5B-D9CB-469F-A165-70867728950E this is great app to build
480149F2-BCF4-40F4-3C19-08D7DFC7C616 What is Lorem Ipsum? 0F8FAD5B-D9CB-469F-A165-70867728950E Lorem Ipsum is simply dummy
此处post.userid = postlike.likedby 和post.id = postlike.postid
我尝试了这个,但是查询继续执行,没有任何输出
DROP TABLE IF EXISTS #Tempposts
create table #Tempposts
(
PostID varchar(50),
UserID varchar(50),
TotalLikes int,
IsLikedByUser bit
)
Declare @TempPostID varchar(50)
Declare @TempUserID varchar(50)
Declare @TempTotalLikes Int
Declare @TempIsLikedByUser bit
Declare @Id uniqueidentifier
Declare @UserId uniqueidentifier
DECLARE load_cursor CURSOR FOR
SELECT Id, UserId
FROM tbl_posts
OPEN load_cursor
FETCH NEXT FROM load_cursor INTO @Id, @UserId
WHILE @@FETCH_STATUS = 0
BEGIN
SET @TempPostID = @Id
SET @TempUserID = @UserId
SET @TempTotalLikes = (select count(*) from tbl_postlikes where PostId = @Id)
SET @TempIsLikedByUser = (select count(*) from tbl_postlikes where PostId = @Id and LikedBy = @UserId)
insert into #Tempposts values(@TempPostID, @TempUserID, @TempTotalLikes, @TempIsLikedByUser)
FETCH NEXT FROM load_cursor INTO @Id, @UserId
End
Close load_cursor
DeAllocate load_cursor
select * from #Tempposts
Drop table #Tempposts
我的表定义
CREATE TABLE [dbo].[tbl_postlikes](
[Id] [uniqueidentifier] NOT NULL,
[PostId] [uniqueidentifier] NULL,
[LikedBy] [uniqueidentifier] NULL,
[LikedOn] [datetime] NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[tbl_posts](
[Id] [uniqueidentifier] NULL,
[Title] [varchar](max) NULL,
[Post] [varchar](max) NULL,
[UserId] [uniqueidentifier] NULL,
[Created] [datetime] NULL,
[Updated] [datetime] NULL,
[IsVisible] [bit] NULL,
[CreatedBy] [uniqueidentifier] NULL,
[UpdatedBy] [uniqueidentifier] NULL,
[HasComments] [bit] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
答案 0 :(得分:1)
查询似乎正常,如果您有问题,我希望此代码中没有。但是我不知道为什么要使用游标。您需要的是
SELECT
Id,
UserId,
(select count(*) from tbl_postlikes where PostId = tbl_posts.Id) as TotalLikes,
(select count(*) from tbl_postlikes where PostId = tbl_posts.Id and LikedBy = @currentUser) as IsLikedByUser
FROM tbl_posts
您的代码似乎在IsLikedByUser
中有错误。您测试的是,该帖子的作者喜欢他的帖子,可能不是您想要的。您应该将当前用户作为查询的参数发送给该用户并进行测试。
您绝对应该添加代码来填充表格。我的意思是:
insert into tbl_posts (id, title, userid, post)
values
('6B989E93-10FE-4131-38B4-08D7DC6856B4', 'great', '0F8FAD5B-D9CB-469F-A165-70867728950E', 'this is great app to build'),
('480149F2-BCF4-40F4-3C19-08D7DFC7C616', 'What is Lorem Ipsum?', '0F8FAD5B-D9CB-469F-A165-70867728950E', 'Lorem Ipsum is simply dummy');
insert into tbl_postlikes (Id, PostId, LikedBy, LikedOn)
values
('9B0B2DEB-47CE-4F6E-B892-35D2F2D3F543', '480149F2-BCF4-40F4-3C19-08D7DFC7C616', '0F8FAD5B-D9CB-469F-A165-70867728950E', '2020-04-15 23:08:26.567'),
('40E7C5F4-AD42-4A22-8BC0-5B0C9F125427', '480149F2-BCF4-40F4-3C19-08D7DFC7C616', '0F8FAD5B-D9CB-469F-A165-70867728950E', '2020-04-15 23:08:10.530'),
('C132E64E-C9A2-471E-9DD9-CB9A342D2DBE', '6B989E93-10FE-4131-38B4-08D7DC6856B4', '0F8FAD5B-D9CB-469F-A165-70867728950E', '2020-04-16 11:43:46.730'),
('32099959-DB24-42F0-A629-F0991163509A', '480149F2-BCF4-40F4-3C19-08D7DFC7C616', '0F8FAD5B-D9CB-469F-A165-70867728950E', '2020-04-15 22:49:44.557'),
('AA606CFF-EAC0-4010-A673-FF682D46AB80', '480149F2-BCF4-40F4-3C19-08D7DFC7C616', '0F8FAD5B-D9CB-469F-A165-70867728950E', '2020-04-16 11:43:54.587');