アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のようなことをしようと思っていますが、いろいろやってみてもできなかったのでお尋ねします。

ログインのログを集計しています。
テーブルの構成は大まかには

ID logintime
aaa 2004-11-10 10:10:10
bbb 2004-11-10 10:10:11
ccc 2004-11-10 10:10:12
aaa 2004-11-10 10:10:13
aaa 2004-11-10 10:10:14

という構成です。
これが1日ごとに、

log_20041108
log_20041109
log_20041110
log_20041111

という感じで並んでいます。

それで、やりたいことは「ユニークログイン数のカウント」です。
1日であれば

> select count(distinct id) from log_20041111;

などでできると思うのですが、
(上記の例で行くとこれは3になりますね。)
これをイメージ的には

> select count(distinct id) from log_20041111,log_20041110,log_20041109;

のように、複数のテーブルでやりたいのです。

ID logintime
aaa 2004-11-11 10:10:10
bbb 2004-11-11 10:10:11
ccc 2004-11-11 10:10:12
aaa 2004-11-11 10:10:13
aaa 2004-11-11 10:10:14

ID logintime
aaa 2004-11-10 10:10:10
bbb 2004-11-10 10:10:11
ddd 2004-11-10 10:10:12
aaa 2004-11-10 10:10:13

ID logintime
aaa 2004-11-09 10:10:10
bbb 2004-11-09 10:10:11
eee 2004-11-09 10:10:12

これに対して、「5」という結果が取り出したいのです。
(aaa, bbb, ccc, ddd, eeeの5人)

何かいい方法がないでしょうか??
宜しくお願い致します。

A 回答 (4件)

探索の効率を考えてログを分割して保存する事は結構良くやります。

ログを分割したテーブルで保存する場合、私は定石的にマージテーブルを使っています。

Version 3.23.58で使ったことは、私自身は無いのですが、マニュアルでは3.23.25以上なら使えるように書いてあるので、充分使えるのではないかと思います。

使い方を解説されたマニュアルがあるので、ご一読ください。運用していく上でマージテーブルは便利ですよ。

参考URL:http://dev.mysql.com/doc/mysql/ja/MERGE.html
    • good
    • 0

足し算



select
count(distinct A.id)
+ count(distinct B.id)
+ count(distinct C.id)
from
log_20041111 A,
log_20041111 B,
log_20041111 C
    • good
    • 0

MySQLは使ったことがないのですが、view、union、インラインビューなどが使えないのでちょっと無理だと思います。


なんらかのプログラムを組んでください。

なぜテーブルを日にちごとに分けてしまうのか気になるところです。
    • good
    • 0

テーブル名がとれるんであれば、以下のイメージは


> select count(distinct id) from log_20041111,log_20041110,log_20041109;

select count(distinct id) from
(select id from log_20041111
union
select id from log_20041110
union
select id from log_20041109;
)

でできると思います。
ただ、日々のログの量やテーブル数によっては速度は
期待できないかもしれません

この回答への補足

すみません・・・書き忘れていたのですが、
version 3.23.58なのでunionは使えないんですよ・・・。

せっかく答えていただいたのにすみません。

補足日時:2004/11/11 17:21
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!