내가 가지고 만든 다음 표 :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 사용자에 대해 모든 새 LiveStream을 선택하려고 시도하고있는 경우 해당 사용자가 상대방에 연결된 경우에만 LiveStream을 검색해야합니다 (uc_IsPending =
public static DataTable GetAsyncLiveStream(string CurrentUser, int startAt, int howMany) { ... }
그리고 위의와
는 DataTable을 지정된 C에 대한 실시간 스트리밍의 모든 새 항목을 반환해야합니다 : 0)나는 다음과 같은 인수를 C#을 기능이 위의 요구 사항이 true 인 경우 urrentUser (ls_User).
이것은 페이스 북의 뉴스 피드와 비슷합니다. 친구들과 무슨 일이 일어나고 있는지 ... 오, 예, 누군가 (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()'래퍼 쿼리가 사용하는보기를 정의해야합니다. 지금까지 뭐라구? –
나는 내가 위에 올린 것을 가지고있다. ... 그것은 지금 그것에 관한 것이다. 나는 시작하는 법을 정말로 모른다. – href
데이터베이스를 수정할 수 있습니까? 실제 요구 사항은 무엇입니까 (동일한 구조의 두 개의 서로 다른 테이블을 가지고 있다면 테이블을 꺼낼 가능성이 높습니다)? 아직 준비되지 않은 경우에는 병합 된 문자열이 아닌 준비된 명령문을 사용해야합니다 (SQL 삽입). 테이블 이름은 앞에 'tbl'접두어가 붙지 않아야합니다. (_everything_가 접두어로 붙어 있다면 의미가 없습니다.) 하나의 테이블에서만 선택을하면 혼란스럽고 무의미한 테이블 이름이 접두어로 사용되어서는 안됩니다. 여러 테이블에서 선택할 때 별칭을 사용하고 싶습니다. 어쨌든). –