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

mysql:7872

From: "Tatsuya Kondo" <"Tatsuya Kondo" <konet@xxxxxxxxxx>>
Date: Wed, 4 Jun 2003 08:34:02 +0900
Subject: [mysql 07872] 日付検索について

近藤です。

たびたびすいません。
前回の、「システムのご相談」について、無事、解決する事が出来ました。
ありがとうございます。

今回、新たにSQL文についてお聞きしたい事があります。

CREATE TABLE date_tb (
  date_id bigint(20) unsigned NOT NULL auto_increment,
  date_name date NOT NULL default '0000-00-00',
  PRIMARY KEY  (date_id),
  KEY date_id (date_id)
) TYPE=MyISAM';

INSERT INTO date_tb VALUES (1,'2003-05-01');
INSERT INTO date_tb VALUES (2,'2003-05-02');
INSERT INTO date_tb VALUES (3,'2003-05-03');
INSERT INTO date_tb VALUES (4,'2003-05-04');
INSERT INTO date_tb VALUES (5,'2003-05-05');
・・・5年分。

CREATE TABLE count_tb (
  count_id bigint(20) unsigned NOT NULL auto_increment,
  count_name_id bigint(20) unsigned NOT NULL default '0',
  count_date_id bigint(20) unsigned NOT NULL default '0',
  count_i bigint(20) unsigned NOT NULL default '0',
  count_j bigint(20) unsigned NOT NULL default '0',
  count_e bigint(20) unsigned NOT NULL default '0',
  PRIMARY KEY  (count_id),
  KEY count_id (count_id)
) TYPE=MyISAM';

INSERT INTO count_tb VALUES (1,1,1,'','',1);
INSERT INTO count_tb VALUES (1,1,2,1,1,1);
INSERT INTO count_tb VALUES (1,1,3,'','',4);
INSERT INTO count_tb VALUES (1,2,3,2,3,'');
INSERT INTO count_tb VALUES (1,1,5,1,4,3);
INSERT INTO count_tb VALUES (1,1,6,2,1,'');
INSERT INTO count_tb VALUES (1,2,6,6,'',7);
INSERT INTO count_tb VALUES (1,1,7,1,4,3);

と、カウンターテーブルを作成し、上記の様にデータが入っております。

count_name_id(人名コード)が「1」のみの、5月分のカウントを集計しようとした場合、

          |2003-05-01|2003-05-02|2003-05-03|
―――+――――――+―――――+――――――+―
 count_i|             0 |              1 |             0 | 
 count_j|             0 |              1 |             0 | 
count_e|             1 |              1 |             4 | 
    total|             1 |              3 |             4 |

と、出す方法が分からずご教授をお願いしたいと思いメールしました。

また、始めは、

 date_name|    count_i|   count_j|     count_e|total
―――――+―――――+――――+―――――+―――
2003-05-01|          0 |          0 |            1 | 1
2003-05-02|          1 |          1 |            1 | 3
2003-05-03|          0 |          0 |            4 | 4
2003-05-04|          0 |          0 |            0 | 0
2003-05-05|          1 |          4 |            3 | 8
2003-05-06|          2 |          1 |            0 | 3
2003-05-07|          1 |          4 |            3 | 8

と、出そうと、

SELECT date_tb.date_name, count_tb.count_i, count_tb.count_e, count_tb.count_j
     FROM date_tb LEFT JOIN count_tb ON date_tb.date_id = count_tb.count_date_id
    WHERE count_tb.count_name_id = $name_id
      and date_tb.date_name BETWEEN '2003-05-01' AND '2003-05-31'
   ORDER BY date_tb.date_id";

と、したのですが、count_tb.count_name_id = $name_idがいけないのか、
アクセスがない日のデータが取得出来ません。
LEFT JOINって検索にヒットしなくても左側、すなわちdate_tbの情報は必ず出力するのではないのですか?
私の考えでは、このSQL文で、5/1〜5/31までの、date_name は出力されて、
count_tb.count_name_id = $name_idが、なかった場合、count_i等はnullだと思ったのですが・・・。

JOINの使い方が悪いのかもしれませんが、よろしかったら教えて頂きたいです。

2つの質問になってしまいましたが、よろしくお願いいたします。

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

->    7872 2003-06-04 08:34 ["Tatsuya Kondo" <kon] 日付検索について                        
      7874 2003-06-04 11:08 ┗[Shinya Kawaji <kawaj]                                       
      7875 2003-06-04 18:57  ┗[<lavlav@xxxxxxxxxx> ]