2009-07-13 10 views
-1

私がどのように見える毎週のデータを持つテーブルがあります。現在、私は、最初の日付範囲(月曜日 - 金曜日)を取得するPHPスクリプトを持ってMySQLのクエリ

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に対するクエリを実行します。次に、結果をループして日付間のギャップを調べます。ギャップがあれば、日付が出力され、サイトは「Stay Home」と表示されます。それは連続して数日間(ユーザーが月曜日と金曜日にその週に駐留している場合のように)説明しなければならず、また、毎週末に余分なステップを踏んで、ユーザーが水曜日(したがって、木曜日と金曜日の間に空白を記入すること)。したがって、3つのチェックがあります.1つは月曜日に開始しない、1つは日間のギャップ、もう1つは金曜日より前に終了するユーザー用です。さらに、これらの状況の場合は、連続した日数を考慮する必要があります。

スクリプトは基本的にチェック対象の日付範囲の配列を作成し、数ヶ月間うまくいっています。 HOWEVER

私はそれぞれのユーザーのために戻って休みを持つMySQLの機能があるのだろうか?だから私はそれがクエリで "滞在ホーム"を埋めることができ、私のスクリプトで私と一緒に働いている他の人々に永遠に説明するために必要なファンキーなスクリプトを実行する必要はありません?

ありがとうございます!

答えて

0

Easy! 質問を投げ回してください!

です:

  1. の日にルックアップテーブルを作成したルックアップテーブルと、テーブルのDAYNAME(フィールド)にLEFT_OUTER_JOINを実行するクエリをスカルプト。それはそれは、あなたのテーブルに一致するもの,,,

私はあなたが人によってフィルタリングするかどうかわからないんだけど...基準がユーザーIDのようになり、ルックアップテーブルからすべての行を返します、です=「人」またはユーザーIDが...

結果のデータがあることになります行ですべての日

  • ため

    1. ROW nullの場合、ユーザーIDは、非ブランク日のために存在し、nullになりますスキップした日数:
  • +0

    月曜日から日曜日まで何度も再利用できるテーブルがある場合、実際の日付範囲に基づいて平日の日付と実際の日付を逆転させる日付機能がありますか?私の目標の1つは、すべてではないにしても、自分のhtmlの実際のものが、concatやその他のものを使用してSQLクエリによって返されるようにすることです。あなたのアイデアを使用している間に欠落した日を見つけるのは間違いありません。平日は欠落しています(htmlタグなどで囲まれています)。 – Anthony

    +0

    はい、両方を取得することは可能です。あなたのテーブルには1週間分のデータしか含まれていませんか? 開始日(これを渡す)を基準にした日付計算を行う計算列をクエリに含めます。 また、重複を削除するために、日付とグループ化の小さなテーブルにUNIONのオプションがあります。 – CMB

    +0

    1週間分のデータがあれば、そのテーブルは特定の1週間のデータしか持てません。あなたが意味するのは、1週間分のデータのすべてのクエリだけですが、通常は必ずしもそうとは限りません。私は、ジョエルの代わりに日付の表を持っているという提案と一緒に行かなければならないと思う。私はちょうど7つの値のより軽いテーブルを持っているはずですが、実際に私が一時テーブルの贅沢なしに望むすべてを得るためには、ちょうど毎年の毎日で365 * 20の値テーブルを持つ必要があります。 – Anthony