小编典典

来自两个表的SQL SELECT(友谊)语句

sql

我创建了以下表格:

表#1:tbl_Connections

USE [taaraf_db]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[tbl_Connections](
    [uc_Id] [int] IDENTITY(1,1) NOT NULL,
    [uc_User] [nvarchar](50) NOT NULL,
    [uc_Connection] [nvarchar](50) NOT NULL,
    [uc_IsPending] [int] NOT NULL,
    [uc_DateTime] [datetime] NOT NULL,
 CONSTRAINT [PK_tbl_Connections] PRIMARY KEY CLUSTERED 
(
    [uc_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

ALTER TABLE [dbo].[tbl_Connections] ADD  CONSTRAINT [DF_tbl_Connections_uc_IsPending]  DEFAULT ((1)) FOR [uc_IsPending]
GO

表#2:tbl_LiveStream

USE [taaraf_db]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[tbl_LiveStreams](
    [ls_Id] [int] IDENTITY(1,1) NOT NULL,
    [ls_Story] [nvarchar](max) NOT NULL,
    [ls_User] [nvarchar](50) NOT NULL,
    [ls_Connection] [nvarchar](50) NOT NULL,
    [ls_DateTime] [datetime] NOT NULL,
 CONSTRAINT [PK_tbl_LiveStreams] PRIMARY KEY CLUSTERED 
(
    [ls_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

现在,tbl_Connections中的uc_User代表发起了好友请求的用户,而uc_Connection则代表了另一方。相同的概念应用于第二个表(tbl_LiveStreams)

我正在尝试为cetrain用户选择所有新的LiveStream,仅当该用户连接到另一方时,才应为该特定用户检索LiveStream(uc_IsPending
= 0)

我有一个采用以下参数的C#函数:

public static DataTable GetAsyncLiveStream(string CurrentUser, int

startAt, int howMany) { … }

借助上述内容,如果上述指定的要求为true,则DataTable应该为给定的CurrentUser(ls_User)返回LiveStream中的所有新项。

有点像Facebook新闻提要,与朋友的关系等等…哦,是的,只要有人(ls_User)向(ls_Connection)发起某种特定事件,就会填充tbl_LiveStream。

我不确定我是否在使我的生活复杂化,但这就是我所拥有的,所有帮助都将受到赞赏。

我应该提到我是通过遍历tbl_LiveStream的所有返回记录并使用自定义类函数.IsFriends()进行一些验证来完成的,该函数将检查数据库中的友谊状态并以编程方式填充DataTable
…我承认这有点愚蠢。但是我不确定该怎么做。

最后一件事,我正在使用以下查询返回有限的结果:

SELECT * FROM (
SELECT row_number() OVER (ORDER BY ) AS rownum, ls_Id
FROM )
AS A
WHERE A.rownum BETWEEN (@start) AND (@start + @rowsperpage)

请帮助,并感谢您的宝贵时间。

编辑 我想指出,这就是我从tbl_Connections表中获取谁与谁的朋友的方式。

    const string sql = "SELECT REPLACE((uc_Connection + uc_User), @CurrentUser, '') AS Connection " +
                       "FROM tbl_Connections Connection " +
                       "WHERE (@CurrentUser = uc_Connection) OR (@CurrentUser = uc_User)";

阅读 174

收藏
2021-04-22

共1个答案

小编典典

SELECT * FROM (
SELECT row_number() OVER (ORDER BY ) AS rownum, ls_Id
FROM )
AS A
WHERE A.rownum BETWEEN (@start) AND (@start + @rowsperpage)

此语法是错误的。你不能那样做。使用联合,或使用LINQ to SQL。

从批评的角度来看,不要获取数据表,不要获取实体。对于您可能不熟悉的技术,您似乎过于复杂了。我建议您获取当前所有现有数据并将其转储到CSV文件中,然后使用Sharp
Architecture之
类的工具从头开始启动应用程序,该程序可以为您抽象一些细节。

2021-04-22