利用規約の変更について

MySQLに以下のような形でデータが入っています。

連番|販売日|商品名|単価|数量
1|2014/01/15|たわし|100|5
2|2014/02/10|スポンジ|50|2
3|2014/03/05|タオル|200|3
・・・

このようなデータが大量に保存されていて、それをPHPで以下のように出力したい場合
(数量でも合計金額でも)
2013年度
商品名|4月|5月|6月|・・・12月|1月|2月|3月|合計
たわし|5|6|12|・・・7|14|21|15|210
スポンジ|・・・


どのようにデータを抽出し、どのように表示すればよいでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (4件)

アプローチは二つあります。



(1)SQL文で集計して集計結果をphpで受け取って処理する

集計したい開始年月と終了年月が既知であれば、手っ取り早い方法です。

下記ソースではリテラルで書いていますが、phpスクリプトで動的に生成すればいいですね。

$sql = <<<EOD
select `商品名`,
sum(if (date_format(`販売日`, '%Y%m')='201401', `数量`, 0)) as `1月`,
sum(if (date_format(`販売日`, '%Y%m')='201402', `数量`, 0)) as `2月`,
sum(if (date_format(`販売日`, '%Y%m')='201403', `数量`, 0)) as `3月`,
sum(if (date_format(`販売日`, '%Y%m')='201404', `数量`, 0)) as `4月`,
sum(if (date_format(`販売日`, '%Y%m')='201405', `数量`, 0)) as `5月`,
sum(if (date_format(`販売日`, '%Y%m')='201406', `数量`, 0)) as `6月`,
sum(if (date_format(`販売日`, '%Y%m')='201407', `数量`, 0)) as `7月`,
sum(if (date_format(`販売日`, '%Y%m')='201408', `数量`, 0)) as `8月`,
sum(if (date_format(`販売日`, '%Y%m')='201409', `数量`, 0)) as `9月`,
sum(if (date_format(`販売日`, '%Y%m')='201410', `数量`, 0)) as `10月`,
sum(if (date_format(`販売日`, '%Y%m')='201411', `数量`, 0)) as `11月`,
sum(if (date_format(`販売日`, '%Y%m')='201412', `数量`, 0)) as `12月`
from data
group by `商品名`
EOD;

$stmt = $pdo->query($sql);
// あくまでも「例」なので一気に読み込んでみます(汗
// 実際の出力は、この取得内容から勘案してください
$arr = $stmt->fetchAll(PDO::FETCH_ASSOC);
print '<pre>';
print_r($arr);
print '</pre>';

(2)順次読み込んだデータをphpで集計する

集計範囲が決まっていなくてもいいです。「キーブレーク処理」に慣れていればさほど面倒ではありませんが、速度的に劣ると思います(集計はMySQLに任せた方がphpよりも速い)。

$stmt = $pdo->query("select *, date_format(`販売日`, '%Y%m') as yymm from data order by `商品名`");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$yymm = $row['yymm'];
if (isset($svhin)&&$svhin === $row['商品名']) { // 同じ商品だったら
if (isset($svarr[$yymm])) {
$svarr[$yymm] += $row['数量'];
} else {
$svarr[$yymm] = $row['数量'];
}
} else { // キーブレーク
if (isset($svhin)) {
print $svhin . '<br>';
// このprint部分は「決まっている年月範囲」があるときはそれに合わせて行う
foreach ($svdat as $key=>$val) { printf('%s --- %d<br>', $key, $val); }
}
$svhin = $row['商品名'];
$svdat = array();
$svdat[$yymm] = $row['数量'];
}
}
if (isset($svhin)) {
print $svhin . '<br>';
foreach ($svdat as $key=>$val) { printf('%s --- %d<br>', $key, $val); }
}
    • good
    • 0
この回答へのお礼

思った挙動になりました。
丁寧にありがとうございます。
PHPで集計する方法は、一度やってみたのですが、データが多くて表示に時間がかかったので、SQLで可能な方法を模索していました。
ちなみに、1月、2月と抽出していますが、12月のあとに1~12月の合計を表示する場合はどうすればいいでしょうか?
sum(…)+sum(…)+・・・とやっていると効率が悪いですよね。せっかく1月、2月とラベルがあるのを使うことはできないのでしょうか?

お礼日時:2014/04/16 11:53

>12月のあとに1~12月の合計を表示する場合


あれ?スクールカレンダーじゃないの?

#3さんのロジックを使うのであれば
//1~12月
sum(if (date_format(`販売日`, '%Y')='2014', `数量`, 0)) as `合計`
//4~翌3月
sum(if (date_format(`販売日`, '%Y%m') BETWEEN '201304' AND '201403', `数量`, 0)) as `合計`

pivotを使っていれば、データの絞り込みがすでにできているので
sum(`数量`) as `合計`

をつければ大丈夫です
    • good
    • 0
この回答へのお礼

本来はスクールカレンダーですが、どちらでも聞けば応用できるかなと思いまして(笑)
答えを提示していただけると単純なことでしたが、助かりました。
pivotもこれから使えるようになっていきます。
ありがとうございました。

お礼日時:2014/04/16 16:07

こういう集計はピボットテーブルというのをつくると楽です。



//pivot作成
create table pivot (mindate date,maxdate date,`4月` tinyint not null,`5月` tinyint not null,`6月` tinyint not null,`7月` tinyint not null,`8月` tinyint not null,`9月` tinyint not null,`10月` tinyint not null,`11月` tinyint not null,`12月` tinyint not null,`1月` tinyint not null,`2月` tinyint not null,`3月` tinyint not null);
//データ投入
insert into pivot(mindate,maxdate,`4月`) values((@d:='2013-04-01') ,(@d+interval 1 month - interval 1 day),1);
insert into pivot(mindate,maxdate,`5月`) values((@d:=@d+interval 1 month),(@d+interval 1 month - interval 1 day),1);
insert into pivot(mindate,maxdate,`6月`) values((@d:=@d+interval 1 month),(@d+interval 1 month - interval 1 day),1);
insert into pivot(mindate,maxdate,`7月`) values((@d:=@d+interval 1 month),(@d+interval 1 month - interval 1 day),1);
insert into pivot(mindate,maxdate,`8月`) values((@d:=@d+interval 1 month),(@d+interval 1 month - interval 1 day),1);
insert into pivot(mindate,maxdate,`9月`) values((@d:=@d+interval 1 month),(@d+interval 1 month - interval 1 day),1);
insert into pivot(mindate,maxdate,`10月`) values((@d:=@d+interval 1 month),(@d+interval 1 month - interval 1 day),1);
insert into pivot(mindate,maxdate,`11月`) values((@d:=@d+interval 1 month),(@d+interval 1 month - interval 1 day),1);
insert into pivot(mindate,maxdate,`12月`) values((@d:=@d+interval 1 month),(@d+interval 1 month - interval 1 day),1);
insert into pivot(mindate,maxdate,`1月`) values((@d:=@d+interval 1 month),(@d+interval 1 month - interval 1 day),1);
insert into pivot(mindate,maxdate,`2月`) values((@d:=@d+interval 1 month),(@d+interval 1 month - interval 1 day),1);
insert into pivot(mindate,maxdate,`3月`) values((@d:=@d+interval 1 month),(@d+interval 1 month - interval 1 day),1);

//内容確認
select * from pivot;
1が右肩下がりで投入されているのがわかります。

//元データ作成,データ投入
create table tbl(販売日 date,商品名 varchar(30),単価 int,数量 int);
insert into tbl values('2014/01/15','たわし',100,5)('2014/01/20','たわし',100,10)('2014/02/1','たわし',100,7),('2014/02/10','スポンジ',50,2),('2014/03/05','タオル',200,3);

ここから本題
//各月の品目の件数を表示
select 商品名
,sum(`4月`) as `4月`
,sum(`5月`) as `5月`
,sum(`6月`) as `6月`
,sum(`7月`) as `7月`
,sum(`8月`) as `8月`
,sum(`9月`) as `9月`
,sum(`10月`) as `10月`
,sum(`11月`) as `11月`
,sum(`12月`) as `12月`
,sum(`1月`) as `1月`
,sum(`2月`) as `2月`
,sum(`3月`) as `3月`
from tbl
inner join pivot on 販売日 between mindate and maxdate
group by 商品名;

//各月の品目ごとの数量を表示
select 商品名
,sum(`4月`*`数量`) as `4月`
,sum(`5月`*`数量`) as `5月`
,sum(`6月`*`数量`) as `6月`
,sum(`7月`*`数量`) as `7月`
,sum(`8月`*`数量`) as `8月`
,sum(`9月`*`数量`) as `9月`
,sum(`10月`*`数量`) as `10月`
,sum(`11月`*`数量`) as `11月`
,sum(`12月`*`数量`) as `12月`
,sum(`1月`*`数量`) as `1月`
,sum(`2月`*`数量`) as `2月`
,sum(`3月`*`数量`) as `3月`
from tbl
inner join pivot on 販売日 between mindate and maxdate
group by 商品名;

//各月の品目ごとの金額を表示
select 商品名
,sum(`4月`*`数量`*`単価`) as `4月`
,sum(`5月`*`数量`*`単価`) as `5月`
,sum(`6月`*`数量`*`単価`) as `6月`
,sum(`7月`*`数量`*`単価`) as `7月`
,sum(`8月`*`数量`*`単価`) as `8月`
,sum(`9月`*`数量`*`単価`) as `9月`
,sum(`10月`*`数量`*`単価`) as `10月`
,sum(`11月`*`数量`*`単価`) as `11月`
,sum(`12月`*`数量`*`単価`) as `12月`
,sum(`1月`*`数量`*`単価`) as `1月`
,sum(`2月`*`数量`*`単価`) as `2月`
,sum(`3月`*`数量`*`単価`) as `3月`
from tbl
inner join pivot on 販売日 between mindate and maxdate
group by 商品名;
    • good
    • 0
この回答へのお礼

ピボットテーブル。Excelでは聞いたことありましたが、MySQLでも可能なのですね。
今後の参考にさせていただきます。
ありがとうございました。

お礼日時:2014/04/16 11:50

select 商品名, EXTRACT(YEAR_MONTH FROM 販売日) as 販売月, sum(数量) as 合計数量, sum(数量 * 単価) as 合計金額 from テーブル group by 商品名, 販売月;



あとは商品名と販売月でループさせながら表示する。
    • good
    • 0
この回答へのお礼

ありがとうございます。
今回はNo.3の方の方法を採用させていただきました。
こちらの方法も、今後の参考にさせていただきます。

お礼日時:2014/04/16 11:50

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QMYSQLで月ごとの集計をおこないたい

こんばんは。MYSQLのTABLE_Aに下記の3つのフィールドがあります。

日時(DATE),商品名(VARCHAR),売上(INT)

2010/01/01,商品A,100
2010/01/30,商品B,200
2010/03/10,商品C,300
2010/03/20,商品D,400

最終的に欲しいのは、1月は1月の集計(300)、3月は3月の集計(700)など、月でまとめたいと思っています。

groupでまとめるにも日付まではいっているので、月でまとめるにはどうしたらいいのか悩んでいます。よろしくお願いします。利用MYSQLは5.5です。

Aベストアンサー

SELECT 日時, 商品名, SUM(売上) FROM TABLE_A
GROUP BY DATE_FORMAT(日時, '%Y%m')

QPHPでMySQL内のデータの合計値を算出

お世話になっております。
PHPからMySQL5を呼出すスクリプトを制作しています。


no id   date   price
----------------------------
1  4  2013-4-29  2100
2  2  2013-5-1   3150
3  2  2013-5-31  4200
4  7  2013-6-1   2100
5  2  2013-6-2   1575
6  4  2013-6-2   8400

というようなデータがありますが、下記のように、2番のid、かつ現在から1ヵ月前の期間内のpriceの合計額を算出したいのですが、
SQLおよび変数はどのようなものになりますでしょうか?


id: 2 
total: 5775

ネットで調べながらSQL文などを色々と試していますが、PHPの変数をどのようにしていしたらいいのかが分からず、結果を返すことが出来ずに立ち止まっている状況です。

大変お恥ずかしい質問と認識しているところですが、アドバイスのほど頂戴出来れば幸いです。
宜しくお願い申し上げます。

お世話になっております。
PHPからMySQL5を呼出すスクリプトを制作しています。


no id   date   price
----------------------------
1  4  2013-4-29  2100
2  2  2013-5-1   3150
3  2  2013-5-31  4200
4  7  2013-6-1   2100
5  2  2013-6-2   1575
6  4  2013-6-2   8400

というようなデータがありますが、下記のように、2番のid、かつ現在から1ヵ月前の期間内のpriceの合計額を算出したいのですが、
SQLおよび変数はどのようなものになりますでしょうか?


...続きを読む

Aベストアンサー

ごめんなさいタイポです

× inteval
○ interval

Qsyntax error, unexpected '}' というエラーの対処法

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" maxlength="3" />
<input type="sbumit" value=回答" />
</form>
<hr />
<?php
session_start();
if(is_null($_SESSION['answer'])){
mt_stand(microtime()*1000000);
$_SESSION['answer']=mt_rand(1,100);
$_SESSION['game_cnt']=0;
}
if($_POST['answer']!=""){
$_SESSION['game_cnt']++;
if($_session['answer']==$_POST['answer']){
print("おめでとうございます".
$_SESSION['game_cnt']."回で正解しました!");
session_destroy();
}else{
if($_SESSION['answer']>$_POST['answer']){
print("もう少し大きいです。");
}else
print("もう少し小さいです。");
}
}
}
?>
</body>
</html>
それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" max...続きを読む

Aベストアンサー

print("もう少し大きいです。");
}else
print("もう少し小さいです。");
のelseの後に{がないようですが、大丈夫でしょうか?

Q差分の月数を算出する方法

午前中に差分の日数を算出する方法は教えて頂けたのですが、
月数を算出する方法が分からなく困っています。

2007/08/27 13:00
2007/07/31 00:00

この時、差分は1ヶ月としたいです。
日数は考慮せず、あくまで年月のみで算出を行いたいです。
但し、1ヶ月はその年月の末日と同値です。

今やってる処理はこんな感じです。
$now = mktime(0, 0, 0, $now["tm_mon"], 1, $now["tm_year"]);
$paradate = mktime(0, 0, 0, $paradate["tm_mon"], 1, $paradate["tm_year"]);
$diff = strtotime($now) - strtotime($paradate);

ここまではいいと思うのですが、次に以下のような処理を行っています。
(途中まで書いて、だめじゃんと思った状態)
$select = $diff / (60 * 60 * 24);

ここで何をやりたいかと言うと、何ヶ月の差分があったかを求めたいのです。
しかし、タイムスタンプの差分を求めた日付(ここでは$paradate)が何月で、末日が
何日だからその分を差し引く、その次の月の末日が何日だからその分を
差し引く~・・・
としていかないと正しい差分が求められないと思うのです。
(28, 29, 30, 31の末日の差がある為)

どうすれば簡単に処理できるのでしょうか?
どなたかご教示下さい。
足りない情報がありましたら随時補足致します。

午前中に差分の日数を算出する方法は教えて頂けたのですが、
月数を算出する方法が分からなく困っています。

2007/08/27 13:00
2007/07/31 00:00

この時、差分は1ヶ月としたいです。
日数は考慮せず、あくまで年月のみで算出を行いたいです。
但し、1ヶ月はその年月の末日と同値です。

今やってる処理はこんな感じです。
$now = mktime(0, 0, 0, $now["tm_mon"], 1, $now["tm_year"]);
$paradate = mktime(0, 0, 0, $paradate["tm_mon"], 1, $paradate["tm_year"]);
$diff = strtotime($now) - st...続きを読む

Aベストアンサー

なるほど・・・
月の差だけ考えればよいなら単純に

<?PHP

$str1="2007/08/27 13:00";
$str2="2007/07/31 00:00";

$date1=strtotime($str1);
$date2=strtotime($str2);
$month1=date("Y",$date1)*12+date("m",$date1);
$month2=date("Y",$date2)*12+date("m",$date2);

$diff = $month1 - $month2;
print $diff;

?>

もちろん、7/31~8/1でも1ヶ月になりますけどね。

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います

Q別ファイルの変数を呼び出したいのですが?

初めて質問させて頂くPHP初心者の者です。
例えば、
(a.php)というファイル内で導き出された変数の値($a)を、(b.php)というファイル内に呼び出したいのですが、関数等を利用して呼び出す事は出来るでしょうか?

-----a.php-------------------------
<?php
$a=xxxx; //導き出された変数$a(の値)
?>
-----------------------------------
-----b.php-------------------------
<?php
$a=△△△△; //このファイル内で変数$a(の値)を呼び出したい
?>
------------------------------------

よろしくお願い致します

Aベストアンサー

質問があいまいなので回答が微妙です。

たんにa.phpを再利用する場合、a.phpをincludeやrequire
する#1さんの回答が妥当です。
a.phpの中でprintやechoをしているのが気に入らないなら
出力をバッファリングして捨ててしまえばよいでしょう。

//a.php
<?PHP
print "a_html";
$a_value="a_value";
?>

//b.php
<?PHP
ob_start();
include("a.php");
ob_clean();
print $a_value;
?>

関数の再利用を前提とするならインクルードするわけ
ですからclass化して標準出力をしないのが普通だと
思いますが・・・・

また、別の観点でa.phpからリンクされるb.phpに
移動する際に値を持って移りたいというなら、
単純にpostやgetというformのデータでわたすか、
クッキーやセッションを使うことになります。

Q複数フィールド対してLIKE '% %' したい

SQL初心者なのですが、複数のフィールドをターゲットにしたフリーワード検索用のSQL文の書き方が解らず困っております。
例えば以下の様に"責任者"フィールドを限定して"田中"さんを探す事は出来るのですが、
----------------------------------------------------------------
SELECT * FROM `会員表` WHERE 責任者 LIKE '%田中%'
----------------------------------------------------------------
複数の、例えば以下の3つの
●責任者フィールド
●担当者フィールド
●顧客フィールド
全てを対象に一括で”田中”さんを検索したい場合、
どのように記述すれば良いのでしょうか?

どなたか有識者の方いらっしゃいましたら宜しくお願いします!!

Aベストアンサー

#1さんの方法はお勧めできません。

1)インデックスがきかない
2)セパレータを用いていない

1)に関しては、そもそも前後に%をいれた時点で、きかないので
あまり気にすることもないかもしれませんが、2)に関しては
たとえば、「責任者=吉田,担当者=中村」さんでもヒットします。
これはセパレータに適当な区切り文字を入れる必要があるでしょう。

まっとうに考えれば

(責任者 LIKE '%田中%'
OR 担当者 LIKE '%田中%'
OR 顧客 LIKE '%田中%')
とかじゃないですかねぇ

Qdate型でのbetweenについて教えてください。

皆様、新年明けましておめでとうございます。

早速ですが、date型でのbetweenについて教えてください。

SQL文
SELECT * FROM test WHERE date between date '2007-12-01' and date '2007-12-31'

を発行すると、2007-12-31のレコードがあるのに該当しません・・・

試しにSQL文を
SELECT * FROM test WHERE date between date '2007-12-01 00:00:00' and date '2007-12-31 23:59:59'
としても2007-12-31のレコードは検索されません・・・
SQL文を
SELECT * FROM test WHERE date between date '2007-12-01' and date '2008-01-01'
にすると2007-12-31が該当するのですが、
SELECT * FROM test WHERE date between date '2007-12-01' and date '2007-12-31'
では2007-12-31のレコードは該当しないものでしょうか??

select * from test where num between 10 and 100
とした場合では、num が 10 ~ 100 のものが問い合わされますよね??
date型になるとこうならないのでしょうか??

よろしくお願いします。

皆様、新年明けましておめでとうございます。

早速ですが、date型でのbetweenについて教えてください。

SQL文
SELECT * FROM test WHERE date between date '2007-12-01' and date '2007-12-31'

を発行すると、2007-12-31のレコードがあるのに該当しません・・・

試しにSQL文を
SELECT * FROM test WHERE date between date '2007-12-01 00:00:00' and date '2007-12-31 23:59:59'
としても2007-12-31のレコードは検索されません・・・
SQL文を
SELECT * FROM test WHERE date between date...続きを読む

Aベストアンサー

No.1です。
列の属性をtimestampにして実行してみました。

Welcome to psql 8.2.0, the PostgreSQL interactive terminal.
farm=# create table testtbl6 (hoge timestamp);
CREATE TABLE
farm=# insert into testtbl6 values('2007-12-31');
INSERT 0 1
farm=# select * from testtbl6;
hoge
---------------------
2007-12-31 00:00:00
(1 row)

farm=# select * from testtbl6 where hoge between '2007-01-01' and '2007-12-31';
hoge
---------------------
2007-12-31 00:00:00
(1 row)

farm=# select * from testtbl6 where hoge between date '2007-01-01' and date '2007-12-31';
hoge
---------------------
2007-12-31 00:00:00
(1 row)

●時間だけを多少進めたデータを追加してみました

farm=# insert into testtbl6 values('2007-12-31 01:00:00');
INSERT 0 1
farm=# select * from testtbl6;
hoge
---------------------
2007-12-31 00:00:00
2007-12-31 01:00:00
(2 rows)

farm=# select * from testtbl6 where hoge between '2007-01-01' and '2007-12-31';
hoge
---------------------
2007-12-31 00:00:00
(1 row)

farm=# select * from testtbl6 where hoge between date '2007-01-01' and date '200
7-12-31';
hoge
---------------------
2007-12-31 00:00:00
(1 row)

よって、あなたのDBに登録してあるデータは、2007-12-31と午前0時を少し回っているデータが登録されているため、
検索でヒットしないのではないのでしょうか?

No.1です。
列の属性をtimestampにして実行してみました。

Welcome to psql 8.2.0, the PostgreSQL interactive terminal.
farm=# create table testtbl6 (hoge timestamp);
CREATE TABLE
farm=# insert into testtbl6 values('2007-12-31');
INSERT 0 1
farm=# select * from testtbl6;
hoge
---------------------
2007-12-31 00:00:00
(1 row)

farm=# select * from testtbl6 where hoge between '2007-01-01' and '2007-12-31';
hoge
---------------------
2007-12-31 ...続きを読む

Q連想配列からの値の取り出し

お世話様です。

タイトルにもありますが連想配列を作成した後(以下に記述例)に
その配列からキーを指定して値を取得したいと思っております。
array_keys関数だと値を指定してキーを取得するみたいで
うまくいきませんでした。
何かよい方法ありませんでしょうか?

//配列に格納
while (条件) {
  $aParaOra += array((キー) => (値));
}

Aベストアンサー

解答番号No.1の者です。

ちなみに、キーの指定なしで全部取得するのであれば、
array_values($aParaOra)
で、配列化されたものが返ってきます。

もしくは、以下のようにforeachでループすれば、
キーと値を分離して取得できます。
foreach ($aParaOra as $key => $value) {
# $aParaOra[$key]の値が、$value
}

質問者さんが何をしたいのかがいまいちピンときません。

Q宜しくお願いします。

宜しくお願いします。
mix~max値の間、発行したクエリーからの値を配列に入れたいのですが、どうもFor文中にmin,max値は届いているのですが,$resultに値が入りません。
エラーからしてSQLで行っている変数処理に$iの値が届いてない感じがするのですが、下記のソースを見て頂いて、疑わしき点などご指摘、ご教授いただけませんでしょうか。

どうぞ宜しくお願いします。


--エラー文ここから--->
Catchable fatal error: Object of class stdClass could not be converted to string in ...




--ソースここから--->

$min = h($r -> x);
$max = h($s -> y);
for($i=$min ; $i<= $max; $i++){
$search = sprintf("SELECT id FROM Sheet WHERE no='%d'",$i);
$q_search = mysql_query($search);
$result = mysql_fetch_object($q_search);
echo $result;
}

宜しくお願いします。
mix~max値の間、発行したクエリーからの値を配列に入れたいのですが、どうもFor文中にmin,max値は届いているのですが,$resultに値が入りません。
エラーからしてSQLで行っている変数処理に$iの値が届いてない感じがするのですが、下記のソースを見て頂いて、疑わしき点などご指摘、ご教授いただけませんでしょうか。

どうぞ宜しくお願いします。


--エラー文ここから--->
Catchable fatal error: Object of class stdClass could not be converted to string in ...




--ソースここから...続きを読む

Aベストアンサー

PHPあまり詳しくないので間違っていたらすいません。


>$result = mysql_fetch_object($q_search);
でresultはobject型で代入しておりそれを表示するときにString型に変換できていないのが原因かとおもわれます。

参考URL
mysql-query
http://php.net/manual/ja/function.mysql-query.php

mysql-fetch-array
http://php.net/manual/ja/function.mysql-fetch-array.php

mysql_fetch_object
http://phpspot.net/php/man/php/function.mysql-fetch-object.html


人気Q&Aランキング

おすすめ情報