会員ページでページビューを見たくて
下記のように作ろうとしていますが
表示をどのようにしたらいいか分かりません。
**カウントは取れています**
テーブル count
sn pagename access (フィールド)
1 001top 10
2 001a 13
3 001b 8
4 002t 23
5 002a 18
6 002b 20
このように入れて、表示は下記のようにしたいのです
ID: 001
合計アクセス
31
topページアクセス
10
aのページアクセス
13
bのページアクセス
8
似たような質問が多くてスミマセン、
頭が固くて応用が利きません。。。
アドバイス、お願いいたします。
ちなみに、カウントを取るのは下記のようにしています
カウントを取るページに以下を張る
<IMG src="pgview.php?pagename=001t" height="1" width="1">
pgview.php
<?php
require_once("dbini.php");
$con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
$selectdb = mysql_select_db($DBNAME, $con);
$sql = "update count set access = access + 1 where pagename = '$pagename'";
mysql_query($sql, $con);
$con = mysql_close($con);
?>
MYSQL
ver4.0.26
PHP
ver4.2.2
No.6ベストアンサー
- 回答日時:
uidが一つならもっと単純な書式です
ただしuidをどうやって特定するかが問題には
なりますが。
別に聞いてもらう分にはかまわないですけど、
これってあくまで応用ですのでちょっとでも
考えてから質問しないと上達しませんよぉ。
<?PHP
$con=mysql_connect($host,$user,$pass);
mysql_select_db($db,$con);
$sql = "SELECT SUM(`access`) AS `access` FROM `count` WHERE `uid`='1';";
$res=mysql_query($sql,$con);
while($rows = mysql_fetch_array($res,MYSQL_ASSOC)){
$shuukei['sum']=$rows['access'];
}
$sql = "SELECT * FROM `count` WHERE `uid`='1' ORDER BY `uid`,`page`;";
$res=mysql_query($sql,$con);
while($rows = mysql_fetch_array($res,MYSQL_ASSOC)){
$shuukei[$rows['page']]=$rows['access'];
}
foreach ($shuukei as $key => $val){
print "{$key} access:$val<br>\n";
}
?>
ありがとうございました。
本当は数日でも考えて、それでも分からない時に
ヒントをもらう。。
これがこのようなサイトのマナーだと思って入るのですが
自分の実力以上のものを求められ
大変あせっているので、皆さんにご迷惑をかけています。。
必ず、今教えていただいているような事は
自分の実力にしてもう一度感謝したいと思います。
何度もお付き合い頂きましてありがとうございました。
No.5
- 回答日時:
やり方は2つ
(1)個別データと集計行を一度の問い合わせ
で処理できません。
2度問い合わせればよいでしょう。
<?PHP
$con=mysql_connect($host,$user,$pass);
mysql_select_db($db,$con);
$sql = "SELECT `uid`,SUM(`access`) AS `access` FROM `count` GROUP BY `uid`;";
$res=mysql_query($sql,$con);
while($rows = mysql_fetch_array($res,MYSQL_ASSOC)){
$shuukei[$rows['uid']]['sum']=$rows['access'];
}
$sql = "SELECT * FROM `count` ORDER BY `uid`,`page`;";
$res=mysql_query($sql,$con);
while($rows = mysql_fetch_array($res,MYSQL_ASSOC)){
$shuukei[$rows['uid']][$rows['page']]=$rows['access'];
}
foreach ($shuukei as $key1 => $val1){
print "ID:$key1<br>\n";
foreach ($val1 as $key2 => $val2){
print "{$key2} access:$val2<br>\n";
}
}
?>
(2)PHPで配列の合計を得る方法があります。
個別データが数十~数百しかないのであれば、
PHPに任してしまう手もあります。
<?php
$con=mysql_connect($host,$user,$pass);
mysql_select_db($db,$con);
$sql = "SELECT * FROM `count` ORDER BY `uid`,`page`;";
$res=mysql_query($sql,$con);
while($rows = mysql_fetch_array($res,MYSQL_ASSOC)){
$shuukei[$rows['uid']][$rows['page']]=$rows['access'];
}
foreach ($shuukei as $key1 => $val1){
print "ID:$key1<br>\n";
print "sum access:".array_sum($val1)."<br>";
foreach ($val1 as $key2 => $val2){
print "{$key2} access:$val2<br>\n";
}
}
?>
この回答への補足
yambejp 様 いつもありがとうございます!!
(1)の方法で使わせていただきます。
もうひとつだけお願いします、
これを UID 一人分だけ表示するにはどうしたらいいでしょうか?
これ以上聞くのも。。。なんですが
よろしくお願いいたします。
No.4
- 回答日時:
私の環境とは異なるのでエラーがどこででるかは
わかりませんが、基本的に新しいDBの形式であれば
sqlの発行も一つだけで済みそうですし、特に
問題もないかと。
SELECT * FROM `count` ORDER BY `uid`,`page`;
お手数ですみませんが、エラーの状況などまた
ご報告いただけるとフォローできるかもしれません。
<?PHP
//$host,$user,$pass,$dbは予め指定。
$con=mysql_connect($host,$user,$pass);
mysql_select_db($db,$con);
$sql = "SELECT * FROM `count` ORDER BY `uid`,`page`;";
$res=mysql_query($sql,$con);
while($rows = mysql_fetch_array($res,MYSQL_ASSOC)){
$shuukei[$rows['uid']][$rows['page']]=$rows['access'];
}
foreach ($shuukei as $key1 => $val1){
print "ID:$key1<br>\n";
foreach ($val1 as $key2 => $val2){
print "{$key2} access:$val2<br>\n";
}
}
?>
この回答への補足
うまくいきました。!!
私がテーブル名を間違えていました(スペルミスです)。。
スミマセン、もう少し教えてください。
uid(一人分) の合計をa b c d の上に表示させるのはどうしたらいいですか?
それから、実際に表示させるのは uid 1人分なのですが
これもどう記入したらいいでしょうか?
No.3
- 回答日時:
すみません。
私の記述ミスですwhileの中のrowsの一つがrowになっていました。
正:
while($rows = mysql_fetch_array($res,MYSQL_ASSOC)){
$shuukei[$rows['uid']][$rows['page']]=$rows['access'];
}
この回答への補足
スミマセン、やはりエラーが出ます。
そこでせっかくご指導いただいている時に勝手なんですが、
前々回示していただいた方が、正しいような気がして
こちらなら表示させられると思ったのですが、
やはり、勉強不足で表示しません。(今回もカウントはしています)
甘えているのは分かっているのですが、、、
どうか宜しくお願いいたします。
count(テーブル名)
uid(int) page(varchar10) access(int)
1 a 10
1 b 5
1 c 1
2 a 11
2 b 6
2 c 2
表示を同じく
ID:1の方のアクセス
全体
16
a のpage
10
b のpage
5
c のpage
1
ID:2の方のアクセス
全体
19
a のpage
11
b のpage
6
c のpage
2
No.2
- 回答日時:
失礼しました。
では順番にSELECT SUBSTRING(`pagename`,1,3) AS `uid`,'ALLDATA' AS `page`,SUM(`access`) AS `access` FROM `count` GROUP BY `uid`;
とすると、ユーザーIDごとの集計がでます。
uid page access
001 ALLDATA 31
002 ALLDATA 61
SUBSTRINGはpagenameの頭から3文字もってきてます。
集計用の名前としてALLDATAとしました。
これをテンポラリテーブルに流し込んでるのが最初
の行です。
2行目のINSERT INTOで、全てのデータをSHUUKEI
テーブルに流し込んでます。
3行目で検索結果を表示します。
SQL上ではこんな感じ。
uid page access
001 ALLDATA 32
001 top 10
001 a 14
001 b 8
002 ALLDATA 61
002 t 23
002 a 18
002 b 20
これをPHPでかくと。
<?php
$link=mysql_connect($host,$user,$pass);
mysql_select_db($db,$link);
$sql = "CREATE TEMPORARY TABLE `SHUUKEI` SELECT SUBSTRING(`pagename`,1,3) AS `uid`,'ALLDATA' AS `page`,SUM(`access`) AS `access` FROM `count` GROUP BY `uid`;";
$res=mysql_query($sql,$link);
$sql = "INSERT INTO `SHUUKEI` SELECT SUBSTRING(`pagename`,1,3) AS `uid`,SUBSTRING(`pagename`,4,3) AS `page`,`access` FROM `count`;";
$res=mysql_query($sql,$link);
$sql = "SELECT * FROM `SHUUKEI` ORDER BY `uid`;";
$res=mysql_query($sql,$link);
while($rows = mysql_fetch_array($res,MYSQL_ASSOC)){
$shuukei[$rows['uid']][$row['page']]=$rows['access'];
}
foreach ($shuukei as $key1 => $val1){
print "ID:$val1<br>\n";
foreach ($key1 as $key2 => $val2){
print "{$key2} access:$val2<br>\n";
}
}
?>
ちなみにpagenameをわけるというのは
どうせ、ユーザーIDとページを分けて集計
するのであれあば最初からuidとpageという
構成にすればよいということです。
この回答への補足
丁寧な解説ありがとうございます。
uid と page 分けた方が考えやすいですよね、
思いつきませんでした。。
今、教えて頂いた式を自分の環境に書き換えてUPしました。
<?php
//データベース関連のデータをインクルードします
require_once("dbini.php");
//MySQLに接続します
$con = mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
//データベースを選択します
$selectdb = mysql_select_db($DBNAME, $con);
$sql = "CREATE TEMPORARY TABLE `SHUUKEI` SELECT SUBSTRING(`pagename`,1,3) AS `uid`,'ALLDATA' AS `page`,SUM(`access`) AS `access` FROM `count` GROUP BY `uid`;";
$res=mysql_query($sql,$con);
$sql = "INSERT INTO `SHUUKEI` SELECT SUBSTRING(`pagename`,1,3) AS `uid`,SUBSTRING(`pagename`,4,3) AS `page`,`access` FROM `count`;";
$res=mysql_query($sql,$con);
$sql = "SELECT * FROM `SHUUKEI` ORDER BY `uid`;";
$res=mysql_query($sql,$con);
while($rows = mysql_fetch_array($res,MYSQL_ASSOC)){
$shuukei[$rows['uid']][$row['page']]=$rows['access'];
}
foreach ( $shuukei as $key1 => $val1){
print "ID:$val1<br>\n";
foreach ($key1 as $key2 => $val2){
print "{$key2} access:$val2<br>\n";
}
}
?>
すると以下のような文が返ってきました。
ID:Array
Warning: Invalid argument supplied for foreach() in /virtual/wave/public_html/mng/pagecount.php on line 22
ちなみに22行目は
foreach ($key1 as $key2 => $val2){
の所です。
ご親切な解説に甘えていますが、
宜しくお願いいたします。
No.1
- 回答日時:
集計単位をみると個人的にはpagenameは分けた方が
いいと思いますよ。
いまのままだとこんな感じでいけそうです。
CREATE TEMPORARY TABLE `SHUUKEI`
SELECT SUBSTRING(`pagename`,1,3) AS `uid`,'ALLDATA' AS `page`,SUM(`access`) AS `access` FROM `count` GROUP BY `uid`;
INSERT INTO `SHUUKEI` SELECT SUBSTRING(`pagename`,1,3) AS `uid`,SUBSTRING(`pagename`,4,3) AS `page`,`access` FROM `count`;
SELECT * FROM `SHUUKEI` ORDER BY `uid`;
もちろん集計だけは別のSQLで処理しても構いません。
この回答への補足
いつもありがとうございます!
一生懸命読んでいますが。。意味が分かりません。
恐れ入りますが、少しだけでも解説をお願いできませんか?
それから、pagenameを分けた方がいいというのは
具体的に、どのようにしたらいいのでしょう?
何度もスミマセンが、宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP PHP ページング データベース 1 2022/06/16 10:30
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- MySQL MySQL,JavaScript,PHPコードの結果を表示する方法を教えてください。 1 2023/02/13 17:49
- MySQL mysqlがインストールされているのかどうか 1 2023/06/05 14:19
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- MySQL mysqlがインストールされているのかわかりません 1 2023/06/05 02:26
- MySQL データベースの複製の仕方(mysql) 2 2023/05/30 18:24
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのエラーについてです
-
sqlから多次元配列に要素を格納...
-
テーブルに入っているデータと...
-
CSVをダウンロードさせた際、CS...
-
会員登録したらメールが送られ...
-
Resource id #3 をフィールドの...
-
変数内のデータをmysqlのデータ...
-
postした値のデータ型
-
mysql_query等でレコード数を変...
-
PHP と Mysql の連携時に発生す...
-
PHPからMySQL・異なるDBにコピー
-
PHP+mysqlでSQL文に文字数制限...
-
変数同士の引き算が出来ない
-
VBAをつかってクエリの情報を抽...
-
MySQLでデータベースにデータin...
-
insert1つの処理でもトランザ...
-
ResultSetインターフェイスでの...
-
BLOBでの画像表示について
-
<VB.NET>INSERT文でDBにデータ...
-
PHPで[]の使い方について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
sqlから多次元配列に要素を格納...
-
PHP+mysqlでSQL文に文字数制限...
-
phpのエラーについてです
-
PHPで絞り込み検索結果の件数を...
-
PDOを使いたい
-
CSVをダウンロードさせた際、CS...
-
stringaddslashes 半角¥が消える
-
MySQLのデータを使ってプルダウ...
-
mariadbでのエラー
-
php+mysql sql文実行について
-
XAMMPが起動しません。
-
SQL文2つ実行
-
会員登録したらメールが送られ...
-
「mysqlclient」の事が分からな...
-
if文で、レコードが無い場合だ...
-
mysql_real_escape_string
-
XAMPPで画面が真っ白になります。
-
配列に値が入らない
-
SQLの結果が返ってこない
-
ボタンのonclick時における関数...
おすすめ情報