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

mysql:8847

From: ML account <ML account <ml@xxxxxxxxxx>>
Date: Sat, 21 Feb 2004 15:16:16 +0900
Subject: [mysql 08847] Re:

 こんにちは。

lavlav@xxxxxxxxxxさんの
<002d01c3f795$91cfac40$fa01a8c0@d276lut1b>
"[mysql 08839] Re: "


 TRANSFORMクエリが使えれば、一発なんですが、使えないとなると、
[mysql08841]で沼田さんが示された方法位しか無いですね。しかし、24*2=48発
のクエリを出して、は少々問題があるでしょう。

 考え方の転換をしてみましょう。結果出力がHTMLであれば、PerlなりPHP
なりJavaなりの処理系を使っていると思います。ならば、DBMSで苦心惨憺して最
終的な表を得るよりは、DBMSで得た中間集計を処理系で最終的な表にする方が良
いでしょう。具体的には最終的な表の値を格納する配列に、クエリで得られたメー
ルのカウントを放り込んで行く方法です。また配列を用いなくとも、直接HTMLの
テーブルを中間集計から作成して行く事も可能ですが、これはプログラミングに
自信がある人向けですね。

 中間集計を得るSQL文は例えばこの様なものでしょう。このSQL文中の
    '2004-02-01'の箇所を範囲の自年月日に
    '2004-02-04'の箇所を範囲の至年月日に
    1111の箇所を対象グループIDに
置き換えを行います。

    SELECT 
      TO_DAYS(mail_datetime)-TO_DAYS('2004-02-01') AS DAYS,
      DATE_FORMAT(mail_datetime,'%Y-%m-%d') AS YMD,
      HOUR(mail_datetime) AS HH,
      master_tb_f.master_group_id AS FROM_GID,
      master_tb_t.master_group_id AS TO_GID,
      count(*) AS CNT
    FROM (mail_tb INNER JOIN master_tb AS master_tb_f 
            ON mail_tb.mail_from_master_id=master_tb_f.master_id)
      INNER JOIN master_tb AS master_tb_t 
            ON mail_tb.mail_to_master_id=master_tb_t.master_id
    WHERE DATE_FORMAT(mail_datetime,'%Y-%m-%d') between '2004-02-01' AND '2004-02-04'
        AND (
          master_tb_f.master_group_id=1111 OR
          master_tb_t.master_group_id=1111
        )
    GROUP BY DAYS,YMD,HH,FROM_GID,TO_GID
    ORDER BY DAYS,HH,FROM_GID,TO_GID



 アプリケーション構築の際には、クエリで何が出来るのか、プログラムで何が
出来るのか、そしてどちらで行った方が適切なのか、を常に考える必要があるか
と思います。



    松枝知直    <tomom@xxxxxxxxxx>
            http://www.argus.ne.jp/~tomom/



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

      8833 2004-02-20 17:48 [<lavlav@xxxxxxxxxx> ]                                         
      8834 2004-02-20 17:55 ┣[<lavlav@xxxxxxxxxx> ] Re: SQL 文について                    
      8836 2004-02-20 18:09 ┣[遠藤 俊裕 <endo_t@xx]                                       
      8839 2004-02-20 18:40 ┃┗[<lavlav@xxxxxxxxxx> ]                                     
      8841 2004-02-20 20:23 ┃ ┣[<numata@xxxxxxxxxx> ]                                   
      8844 2004-02-21 04:51 ┃ ┣[Kazuhiro Yoshida <mo]                                   
      8846 2004-02-21 14:24 ┃ ┃┗[<konet218@xxxxxxxxxx]                                 
      8849 2004-02-21 17:59 ┃ ┃ ┣[Kazuhiro Yoshida <mo]                               
      8850 2004-02-21 18:38 ┃ ┃ ┃┗[<konet218@xxxxxxxxxx]                             
      8852 2004-02-22 02:22 ┃ ┃ ┃ ┗[Kazuhiro Yoshida <mo]                           
      8855 2004-02-22 16:11 ┃ ┃ ┗["katayose" <katayose]                               
      8857 2004-02-23 02:03 ┃ ┃  ┗[ML account <ml@xxxxx]                             
->    8847 2004-02-21 15:16 ┃ ┗[ML account <ml@xxxxx]                                   
      8848 2004-02-21 17:18 ┃  ┗[<konet218@xxxxxxxxxx]                                 
      8838 2004-02-20 18:15 ┗[Shingo Yamagai <yama] Re: SQL 文について