[前][次][番号順一覧][スレッド一覧]

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: 解決)期間で入力された情報からの日付毎の情報を取得したい