あるサイトへのアクセス情報を格納したテーブルがあります。
テーブル名:access
フィールド:ip,page
(*具体的な格納情報をコメ欄に書いています)
ここから、各ページへのユニークアクセス数を産出して、以下のテーブルに格納したいです。
テーブル名:unique
フィールド:page,unique
SQLとPHPでこの処理を実現したいと思います。
ストアドプロシージャは知識が全く無いのでPHPがいいです。
自分なりに考えた流れとしては、
AページのIP数を重複を除いてカウント(これがunique数になる)
Bページ、Cページと同じように処理・・
でしょうか。
一時表など使えば出来るような気もしますが、使ったことが無いので具体的な方法が思い浮かびません。
ちょっと複雑になると思いますのでポイントは500以上は用意します。
みなさんよろしくお願い致します。
>出来ました!自分で作ったSQLはエラーになっていたんですが
>「as aaa」が無かったからでした。
>このままだとポイントが進呈できないので、回答欄に何か
>書き込んで頂けないでしょうか?よろしくお願いします。
お気遣いどうもありがとうございます。
お言葉に甘えさせていただきます。
きちんと確認してないですが・・・
select page, distinct(ip, page)
from access
group by page
でいかがでしょうか?
回答ありがとうございます。
正確には
select distinct(ip, page) from access group by page
のようですが、これだとcountが無いので質問の意図とは遠い結果になってしまいます。
コメント欄でKUROXさんに回答いただきましたが、
SELECT page,count(*)
FROM (SELECT ip,page
FROM access
GROUP BY ip, page) as aaa
GROUP BY page
で完璧にいけるようです。
後はこれをuniqueテーブルにINSERTするだけですが、そちらは自力で出来ました。
出来れば締め切りたいのですがKUROXさんから回答欄に頂いていないので、そちらを待ちたいと思います。
質問は解決しました。みなさんありがとうございました。
あらら、書き間違いでした。
select page, count(distinct ip, page)
from access
group by page
これではいかがでしょう?
回答ありがとうございます。
こちらでも同じ結果になるようですが、シンプルでいいですね。
実行速度も微妙に速かったりするのでしょうか。こちらのSQLでいきたいと思います。
>出来ました!自分で作ったSQLはエラーになっていたんですが
>「as aaa」が無かったからでした。
>このままだとポイントが進呈できないので、回答欄に何か
>書き込んで頂けないでしょうか?よろしくお願いします。
お気遣いどうもありがとうございます。
お言葉に甘えさせていただきます。
コメント欄での回答ありがとうございました。サブクエリを覚えるきっかけになったのでありがたい回答でした。
ポイントについて)
SQL自体はkunyamiさんのSQLの方がシンプルなのでポイント配分に迷ったのですが、色々考えた結果いるかはKUROXさんで、ポイントをkunyamiさんに少しだけ多目に配分する事にしました。
みなさんありがとうございました。これで締め切らせていただきます。大変有益な質問になりました。
コメント欄での回答ありがとうございました。サブクエリを覚えるきっかけになったのでありがたい回答でした。
ポイントについて)
SQL自体はkunyamiさんのSQLの方がシンプルなのでポイント配分に迷ったのですが、色々考えた結果いるかはKUROXさんで、ポイントをkunyamiさんに少しだけ多目に配分する事にしました。
みなさんありがとうございました。これで締め切らせていただきます。大変有益な質問になりました。