現在の日のすべてのイベントと、recurring
= 1のすべてのイベントを返すSQL(Server)クエリを作成しようとしていますが、その日にこのイベントを返すようにしたいそのイベントの後の52週間にわたって開催されています。複雑なSQL Serverクエリ
私のテーブルは以下のように構成されています
Event
{
event_id (PK)
title,
description,
event_start DATETIME,
event_end DATETIME,
group_id,
recurring
}
Users
{
UserID (PK)
Username
}
Groups
{
GroupID (PK)
GroupName
}
Membership
{
UserID (FK)
GroupID (FK)
}
私はこれまで、次のされているように、コード:これは、イベントの日付のための1つのクエリが中に保存した場合、その結果
var db = Database.Open("mPlan");
string username = HttpContext.Current.Request.Cookies.Get("mpUsername").Value;
var listOfGroups = db.Query("SELECT GroupID FROM Membership WHERE UserID = (SELECT UserID from Users WHERE Username = @0)", username);
foreach(var groupID in listOfGroups)
{
int newGroupID = groupID.GroupID;
var result = db.Query(
@"SELECT e.event_id, e.title, e.description, e.event_start, e.event_end, e.group_id, e.recurring
FROM event e
JOIN Membership m ON m.GroupID = e.group_id
WHERE e.recurring = 0
AND m.GroupID = @0
AND e.event_start >= @1
AND e.event_end <= @2
UNION ALL
SELECT e.event_id, e.title, e.description, DATEADD(week, w.weeks, e.event_start), DATEADD(week, w.weeks, e.event_end), e.group_id, e.recurring
FROM event e
JOIN Membership m ON m.GroupID = e.group_id
CROSS JOIN
(SELECT row_number() OVER (ORDER BY Object_ID) AS weeks
FROM SYS.OBJECTS
) AS w
WHERE e.recurring = 1
AND m.GroupID = @3
AND DATEADD(WEEK, w.Weeks, e.event_start) >= @4
AND DATEADD(WEEK, w.Weeks, e.event_end) <= @5", newGroupID, start, end, newGroupID, start, end
);
このイベントと52週間のイベントが返されます。このイベントの1週間後にイベントを照会すると、何も返されません。
可能な複製[オブジェクト型WebMatrix.Data.DynamicRecordから既知の管理プロバイダのネイティブ型へのマッピングが存在しません](http://stackoverflow.com/questions/9665051/no-mapping-exists-from-object-type) -webmatrix-data-dynamic-record-known-manag) –
あなたの他の質問の答えは、あなたのエラーの方向にあなたを指摘しました...それはあなたのSQLとは関係ありません - 代わりに、 'DynamicRecord'である' groupID'を 'db.Query'に追加します。前の結果セットから値を取得し、それをintに変換する必要があります。または、あなたがメインクエリで追加の結合を行う代わりに 'foreach'を使う理由がないので、このコードを書き直すことをお勧めします。 –
@MichaelFredrickson、応答ありがとう。私はこれをやろうとしていますが、SQL ServerとC#の初心者として苦労しています。あなたは、あなたが提案した参加を使って書くことができる別のクエリを提案してもらえますか?そのようなコードを書くのに必要なスキルはほとんどないでしょうか? –