我已经创建了下面的表格:SQL SELECT从两个表(友谊)语句
表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
现在uc_User在tbl_Connections表示发起好友请求的用户,并且uc_Connection代表对方。 相同的概念上第二个表(tbl_LiveStreams)
我想选择一个cetrain用户的所有新的串流应用,流媒体直播应该仅当用户连接到对方特定用户检索(uc_IsPending = 0)
我有一个C#函数,采用下列参数:
public static DataTable GetAsyncLiveStream(string CurrentUser, int startAt, int howMany) { ... }
而且上述,一个DataTable应该返回所有新项目在流媒体直播了给定的C urrentUser(ls_User)如果上述要求是真实的。
这有点像Facebook的新闻提要,什么是与朋友等发生...... 噢,tbl_LiveStream填充每当有人(ls_User)initates某种特定事件来(ls_Connection)。
我不确定我是否在这里使我的生活复杂化,但这就是我所有的帮助和赞赏。
我要指出,我已经通过从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()'包装查询使用。到目前为止,你有什么? –
我有我上面发布的内容......现在就是这样。我真的不知道如何开始。 – href
你能修改数据库吗?你的实际需求是什么(如果你有两个不同的表格,[有效] _exact_相同的结构,你可能有一张桌子拉出来)?如果你还没有(SQL注入),你应该使用预处理语句,而不是连接字符串。表名不应以'tbl'为前缀(如果_everything_前缀无意义),并且列不应该以缩短的表名作为前缀(混淆,仅从一个表中选择时没有意义,并且您希望在从多个表中进行选择时使用别名无论如何)。 –