こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLで抽出した数字の合計をPHPで算出

SQLとPHPを使って計算表を作っています。

サンプルとして

<?php
<?php
function connect() {
return new PDO("mysql:dbname=★★★★★;host=★★★★★","★★★★★","★★★★★",
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"));
}
?>
$pdo = connect();
$st = $pdo->query("SELECT * FROM test ORDER BY number");
$number = $st->fetchAll();
?>
<?php foreach ($number as $g) { ?>
<?php } ?>

で、
http://mottu.link/test/index.php
という結果が出てきます。

この数字の合計を一番下に表示したいのですが、どのようにすればよいでしょうか?

何卒よろしくお願いします。

投稿日時 - 2017-02-21 17:45:54

QNo.9296520

困ってます

質問者が選んだベストアンサー

すいません
<?php $sum += $g['number ']; ?>
の部分に私のタイプミスがあったようですね。
添字の中にスペースが入っているので取り除いてください。

投稿日時 - 2017-02-22 17:48:25

お礼

ありがとうございます!
下記のプログラムで成功しました!

<?php
function connect() {
return new PDO("mysql:dbname=★★★★★;host=★★★★★","★★★★★","★★★★★",
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"));
}
$pdo = connect();
$st = $pdo->query("SELECT * FROM test ORDER BY number");
$number = $st->fetchAll();
?>
<?php $sum = 0; ?>
<?php foreach ($number as $g) { ?>
<?php echo $g['number'] ?><br>
<?php $sum += $g['number']; ?>
<?php } ?>
<?php echo $sum; ?>

こんな具合です。

http://mottu.link/test/index3.php

不慣れなもので、いろいろと申し訳ありませんでした。
ものすごく勉強になりました。
また機会がありましたら教えてください。
ありがとうございました!

投稿日時 - 2017-02-22 18:06:40

ANo.4

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

<?php foreach ($number as $g) { ?>
<?php echo $g['number'] ?><br>
<?php } ?>

となっているのであれば、この部分を

<?php $sum = 0; ?>
<?php foreach ($number as $g) { ?>
<?php echo $g['number'] ?><br>
<?php $sum += $g['number ']; ?>
<?php } ?>
<?php echo $sum; ?>

とすれば出てくると思います。
単純に 0 という数字が入った変数を用意し、そこへ順に値を足していき、最後に表示させるだけです。

投稿日時 - 2017-02-22 15:13:09

補足

すみません。

ご指摘のように

<?php
function connect() {
return new PDO("mysql:dbname=★★★★★;host=★★★★★","★★★★★","★★★★★",
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"));
}
$pdo = connect();
$st = $pdo->query("SELECT * FROM test ORDER BY number");
$number = $st->fetchAll();
?>
<?php $sum = 0; ?>
<?php foreach ($number as $g) { ?>
<?php echo $g['number'] ?><br>
<?php $sum += $g['number ']; ?>
<?php } ?>
<?php echo $sum; ?>

としたのですが、
どうしても合計が0になってしまいます。

http://mottu.link/test/index2.php

もう少し頑張ってみます。
もし、気づかれたところなどがありましたら、アドバイスお願いします。
要領が悪くて申し訳ありません。

投稿日時 - 2017-02-22 16:48:47

お礼

ありがとうございました。

投稿日時 - 2017-03-16 17:21:54

ANo.2

> どの位置に置けばよいか教えて頂けないでしょうか。

例示されているプログラムにはDBから取得した値を出力する部分が省略されているように見えますが、実際にはどうなっているのでしょうか。
そのプログラムだけでは
=====
100
120
150
200
=====
と出力されません。

=====
<?php foreach ($number as $g) { ?>
<?php } ?>
=====
の部分に結果を出力する処理が本来であれば書かれているのではないかという推測で、この部分を
=====
<?php $sum = 0; ?>
<?php foreach ($number as $g) { ?>
<?php $sum += $g['number ']; ?>
<?php } ?>
<?php echo $sum; ?>
=====
と置き換える(foreach 内の処理をマージする)形で記載すればいいのではないかと言うつもりの回答でした。
また、出力したい数値が入っているDBのカラム名が書かれていないので、SQL文でORDER BYに使用しているカラム名ではないかという推測で「$g['number ']」と書いているので、カラム名が異なるのであれば適切なモノに書き換えてください。

部分的にしかプログラムが開示されておらず必要な情報が欠落していると、推測でしか回答できませんので、できるだけ端折らずにプログラムを例示された方がいいと思います。

投稿日時 - 2017-02-22 09:56:13

補足

大変失礼しました!

最初に開示したプログラムのコードが間違っていました。
正しくは、

<?php
function connect() {
return new PDO("mysql:dbname=★★★★★;host=★★★★★","★★★★★","★★★★★",
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"));
}
$pdo = connect();
$st = $pdo->query("SELECT * FROM test ORDER BY number");
$number = $st->fetchAll();
?>
<?php foreach ($number as $g) { ?>
<?php echo $g['number'] ?><br>
<?php } ?>

です。

カラム名は、numberです。

試験的に行っているので、DBのカラムは1つだけですし、
phpのプログラムも上記のものだけです。

これで
=====
100
120
150
200
=====
と出力されていると思います。

ご回答いただいた事を参考にして頑張ります。

上記のプログラムを前提にアドバイスを頂ければありがいのですが、
まずは、お詫びを申しあげます。
お手数をおかけして申し訳ありませんでした。

投稿日時 - 2017-02-22 14:37:55

お礼

ありがとうございました。

投稿日時 - 2017-03-16 17:21:34

ANo.1

合計したい値が入ったカラム名は number ですかね。

単純なのは
<?php $sum = 0; ?>
<?php foreach ($number as $g) { ?>
<?php $sum += $g['number ']; ?>
<?php } ?>
<?php echo $sum; ?>
ですね。

投稿日時 - 2017-02-21 18:23:11

補足

早速のご回答ありがとうございました。

教えて頂いたコードを下に付け、

<?php
function connect() {
return new PDO("mysql:dbname=★★★★★;host=★★★★★","★★★★★","★★★★★",
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"));
}
?>
$pdo = connect();
$st = $pdo->query("SELECT * FROM test ORDER BY number");
$number = $st->fetchAll();
?>
<?php foreach ($number as $g) { ?>
<?php } ?>

<?php $sum = 0; ?>
<?php foreach ($number as $g) { ?>
<?php $sum += $g['number ']; ?>
<?php } ?>
<?php echo $sum; ?>

としましたが、数値が0になってしまいます。

http://mottu.link/test/index2.php

置く場所が間違っているでしょうか?

大変申し訳ありませんが、どの位置に置けばよいか教えて頂けないでしょうか。
何卒よろしくお願いします。

投稿日時 - 2017-02-21 21:08:19

お礼

ありがとうございました。

投稿日時 - 2017-03-16 17:21:16