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> ]