-1

次のような週次データを含むテーブルがあります。

userID       Site             date
------      ------           ------
Smith    Ferris Wheel       2009-07-13
Jones   Outerspaceland      2009-07-13
LChar   Ferris Wheel       2009-07-14
Smith     Underworld        2009-07-16
Jones     Fish Bowl         2009-07-17
Munson    Go-Go Tech        2009-07-16

現在、最初に日付範囲 (月曜日 - 金曜日) を取得し、次にその日付範囲の各ユーザー ID に対してクエリを実行する PHP スクリプトがあります。次に、結果をループして、日付間のギャップをチェックします。ギャップがある場合、日付が出力され、サイトは「Stay Home」としてリストされます。連続して数日間 (ユーザーがその週の月曜と金曜のみに駐在している場合など) を考慮する必要があり、各週の終わりに追加の手順を実行して、ユーザーがその後家にいるかどうかを確認する必要があります。水曜日 (したがって、木曜日と金曜日がギャップとして埋められます)。そのため、3 つのチェックを行う必要があります。1 つは月曜日に開始しないユーザー、もう 1 つは日の間隔、もう 1 つは金曜日より前に終了するユーザーです。

スクリプトは基本的に、チェックする日付範囲の配列を作成し、何ヶ月もうまく機能しています. でも

各ユーザーに休暇を返す MySQL 機能はありますか? クエリに「Stay Home」を入力して、スクリプトで私と一緒に作業している他の人に説明するのに永遠にかかるファンキーなスクリプトを実行する必要がないようにするには?

ありがとう!

4

1 に答える 1

0

簡単!クエリをひっくり返してください!

あれは:

  1. 曜日を含むルックアップ テーブルを作成する
  2. ルックアップ テーブルとテーブル DAYNAME(field) で LEFT_OUTER_JOIN を実行するクエリをスカルプトします。つまり、ルックアップ テーブルからすべての行が返され、テーブル内で一致する行のみが返されます。

個人でフィルタリングするかどうかわかりません..基準はuserid = 'person' または userid is null のようになります

結果のデータは次のようになります...

  1. ALL DAYS の行
  2. 行では、UserID は非空白日に対して存在し、スキップされた日に対しては null になります。
于 2009-07-14T05:00:17.537 に答える