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