0

ユーザーがスケジュール内の日にアクティビティを追加できるようにするスケジュール作成アプリケーションを開発中です。

見出しデータを保持するスケジュール テーブルがあります。

スケジュール名、スケジュールの日数、ID

アクティビティ ID、スケジュール ID、および日のオフセットを保持するアクティビティ テーブル。

日オフセットは、スケジュールの「n 日目」を参照します。特定の日付を保存する必要はありません。後で誰かのカレンダーにスケジュールが追加されたときに追加されます。

スケジュール内のすべての日に活動があるとは限りません。

質問は - スケジュールから日を削除できるようにしたい (そして、n 日も挿入できるようにしたい)。

削除する場合、ユーザーは編集中のスケジュール内で複数の日を強調表示できます。

したがって、削除を選択すると、アクティビティ テーブルから削除する日付オフセットの配列が得られます。そのビットは些細なことです。

私の問題は、たとえばスケジュールから 5 日目を削除すると、6 日目が新しい 5 日目になります。7 日目、新しい 6 日目などなので、テーブル内の影響を受けるすべてのアクティビティ レコードを更新する必要があります。

これを行う唯一の方法は、削除する日を昇順に並べ替え、次にそれぞれを削除してから、削除されたオフセットよりも大きい dayoffset 値を持つすべてのレコードを検索してデクリメントすることです。次に、削除される日ごとにこのクエリを再実行します。

非常に非効率に感じますが、これ以上のことは考えられません。何か案は?

4

1 に答える 1

0
UPDATE `schedule` SET `day` = `day` - number_of_deleted_days WHERE `day` > first_day_deleted;

順序は実際には依存せず、連続範囲で動作するように最適化できますが、私の知る限り、これ以上良いものはありません

于 2013-10-24T15:27:40.883 に答える