mysql:6419
From: <enim2@xxxxxxxxxx>
Date: Fri, 11 Oct 2002 16:00:50 +0900
Subject: [mysql 06419] Re: 期間で入力された情報からの日付毎の情報を取得したい
Enimです。 私はつい最近MySQLを使用し始めたばっかりで Microsoft SQL Severを6年ほど使っていた知識しか ないのでもしかしたら的外れかもしれません。 まずUNIONやサブクエリーが使えれば一発解決のようなきがするのですが、 確かMySQLはUNION対応がVer4からなんですよね? サブクエリーは未対応? で、それに変わる方法として SELECT文を動的に作成するというのはどうでしょうか? 指定された期間が 2002/10/04〜2002/10/07 ならば SELECT '2002-10-04' as date1 ,COUNT(IF(sch_start<='2002-10-04' AND sch_end>='2002-10-04',1,0) as cnt1 ,'2002-10-05' as date2 ,COUNT(IF(sch_start<='2002-10-05' AND sch_end>='2002-10-05',1,0) as cnt2 ,'2002-10-06' as date3 ,COUNT(IF(sch_start<='2002-10-06' AND sch_end>='2002-10-06',1,0) as cnt3 ,'2002-10-07' as date4 ,COUNT(IF(sch_start<='2002-10-07' AND sch_end>='2002-10-07',1,0) as cnt4 FROM tbl_sch と言う風に1行で動的な複数列をとってくるものです. しかし、私はPHPを使ったことがないので このような動的なSQLを作れるのかどうかが分かりませんし、 列数を最大いくつまでサポートできるのかも分かりません。 Hidenori HAMANO <hamano@xxxxxxxxxx> wrote: > はまのです。 > > あわせて返答をさせていただきます。 > > Fri, 11 Oct 2002 13:33:09 +0900 に > IWASAKI Dai さんは書きました : > > ※テーブルのフィールド名など変更しました。 > > > いわさきです。 > > > > At Fri, 11 Oct 2002 12:49:37 +0900, > > Hidenori HAMANO wrote: > > 期間で入力されたテーブル : tbl_sch > > > > sch_start | sch_end | sch_data > > ------------+------------+------ > > 2002-10-07 | 2002-10-10 | 1 > > 2002-10-01 | 2002-10-04 | 1 > > 2002-09-25 | 2002-10-05 | 1 > > 2002-09-18 | 2002-09-20 | 1 > > > > > > 日付毎に抽出したいデータ(RecordSet) > > > > sch_date | data_umu > > ------------+--------------- > > 2002-10-04 | 1 > > 2002-10-05 | 1 > > 2002-10-06 | 0 > > 2002-10-07 | 1 > > > > たしかにややこしいですが、次のような条件でどうでしょう? > > 指定する期間 d1 から d2 として、 > > SELECT data FROM table > > WHERE ( d1 BETWEEN start AND end ) OR ( d2 BETWEEN start AND end ); > > これは、以下のようなSQLになる、ということでよいのでしょうか? > > SELECT data FROM tbl_sch > WHERE ( d1 BETWEEN sch_start AND sch_end ) OR ( d2 BETWEEN sch_start AND sch_end ); > > 試してみたのですが、この場合だと日付毎のレコードセットは取得できないような > 気がするのですが・・・。 > 上のほうを修正したのですが、あくまでも、各日付毎にデータの入った > レコードセットを取得できれば、と考えています。 > > > Fri, 11 Oct 2002 13:15:36 +0900 に > HARADA Nobuyuki さんは書きました : > > > 原田と申します。 > > > > パッと思いつくところでは、 > > > > date | data > > ------------+------ > > ... | ... > > 2002-10-01 | 0 > > 2002-10-02 | 0 > > 2002-10-03 | 0 > > 2002-10-04 | 0 > > 2002-10-05 | 0 > > 2002-10-06 | 0 > > 2002-10-07 | 0 > > ... | ... > > > > といったテーブルを予め作成しておいて、 > > やはり、このような形になってしまうのでしょうか・・。 > この場合、上の期間テーブルをあらかじめ準備しておく必要があるため、 > 定期的なフィールドの拡張が必要になってしまう為、多少パフォーマンスが > 落ちても、期間テーブルを、必要な分だけ一時テーブルとして作成して > やれないかな、と考えたのがスタートでした。 > > 全てDB上でやってしまえば、phpなどから実行するよりも早くなるのでは、 > という考えがあった為です。 > > とりあえず、php側から、ループにて必要な期間分のデータを取得するよう > 作成しておき、こちらの方向についても引き続き考えてみようと思います。 > > > ----------------------------- > 株式会社 インテグラル > システム開発部 浜野 英哲 > E-mail : hamano@xxxxxxxxxx > URL : http://www.integral.jp/ > http://www.tsukuba.com/ (つくばPiazza) ------------------------------------------------------- Name: Enim Home(PC): http://game6.ncs.gr.jp/~enim/ Home(i): http://game6.ncs.gr.jp/~enim/i/ Mail: enim2@xxxxxxxxxx -------------------------------------------------------
6409 2002-10-11 11:18 [Hidenori HAMANO <ham] 期間で入力された情報からの日付毎の情報を取得したい 6410 2002-10-11 11:46 ┣[IWASAKI Dai <dai@xxx] 6412 2002-10-11 12:49 ┃┗[Hidenori HAMANO <ham] 6413 2002-10-11 13:15 ┃ ┣[HARADA Nobuyuki <har] 6415 2002-10-11 14:11 ┃ ┃┗[Hidenori HAMANO <ham] 6416 2002-10-11 14:37 ┃ ┃ ┣[IWASAKI Dai <dai@xxx] 6418 2002-10-11 15:36 ┃ ┃ ┣[HARADA Nobuyuki <har] -> 6419 2002-10-11 16:00 ┃ ┃ ┗[<enim2@xxxxxxxxxx> ] 6414 2002-10-11 13:33 ┃ ┣[IWASAKI Dai <dai@xxx] 6417 2002-10-11 14:15 ┃ ┗["KAWAI,Takanori" <GC] 6420 2002-10-11 16:27 ┗[Hidenori HAMANO <ham] Re: 解決)期間で入力された情報からの日付毎の情報を取得したい