【发布时间】:2011-10-31 15:40:05
【问题描述】:
我创建了以下表格:
表 #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) { ... }
如果满足上述要求,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)";
【问题讨论】:
-
您应该为此定义一个视图,您的
row_number()包装查询使用该视图。到目前为止你有什么? -
我有我在上面发布的内容......现在就是这样。我真的不知道如何开始。
-
你能修改数据库吗?你的实际需求是什么(如果你有两个不同的表,[有效地] exact 相同的结构,你可能有一个表要拉出来)?如果您还没有(SQL 注入),您应该使用准备好的语句,而不是连接的字符串。表名不应以
tbl为前缀(如果everything都以前缀),列不应以缩短的表名作为前缀(混淆,仅选择时毫无意义从一个表中选择,并且无论如何在从多个表中选择时都希望使用别名)。
标签: c# asp.net sql sql-server