質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

848閲覧

var_dump で取り出したデータの一部をechoを使って取り出したいです。

meka

総合スコア23

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2019/05/14 16:49

編集2019/05/14 17:03

var_dump で取り出したデータの一部をechoを使って取り出したいです。

php

1array(1) { [0]=> array(2) { ["truncate(avg(apple),2)"]=> string(5) "36.52" [0]=> string(5) "36.52" } }

36.52 だけを echo で出したいのですがどのようにコードを書けば表示されるでしょうか。ご教授お願い致します。

追記1

疑問なのですが、上の質問はある期間の合計から平均値を出し、小数点を2桁で切り上げたものです。出てくる答えは平均値なので答えは一つになるような気がするのですが、なぜarray(1)の中にarray(2)が入っているのでしょうか?

こちらが試したコードになります。

php

1$stmt = $this->_db->prepare('select truncate(avg(apple),2) from (select apple from pricedata where date between "2019-04-01" and "2019-04-06") as subquery');

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2019/05/14 16:55

ご自身で試されたコードを質問文に追記し、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが回答が望めると思います。
guest

回答4

0

var_dump で取り出したデータ

大きく勘違いをされていますが、var_dump()は値を取り出すものではなく、単に出力するものです。

今回の使い方も「DBから取り出された値を出力」しているだけですね。
確かにDBから値を取得した際に「どのようなキーにどのような値が入っているか」確認するためには有用です。

array(1) { [0]=> array(2) { ["truncate(avg(apple),2)"]=> string(5) "36.52" [0]=> string(5) "36.52" } }

であれば、[]内を丁寧に辿れば取得できるはずです。
階層が分かりにくければブラウザから動作確認しているのであれば「ソースを表示」から改行ありで見れますし、画面からだけ見たいのであれば前後にhtmlの<pre>タグで囲うのもありです。
var_dumpではなくvar_exportの方が見慣れた形式になるので有用であるケースもあります。

ただ、通常、truncate(avg(apple),2)のように集計関数など使った場合は、冗長になりがちなので、SQL時点でas を利用し別名を付けてその名前をプログラム側では利用します。

なぜarray(1)の中にarray(2)が入っているのでしょうか?

提示内容だけではprepareの後にどう組んでいるか分からないので誰も分かりません。
PDOStatement::fetchAllであれば引数の指定の仕方次第では(または引数未指定のデフォルト)であればそうなる可能性はあるにはありますが。

いずれにしてもPHPマニュアル確認して挙動をミニマムコードで検証して理解を深めるようにしてください。

投稿2019/05/14 21:11

編集2019/05/14 21:17
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/14 23:37

なんで、この SQL が書ける人が、echo 出来ないんだろ。。。 ちょっと不思議。
m.ts10806

2019/05/14 23:57

んーまあSQL書ける人とSQLを使う言語を書ける人は必ずしもイコールにはなりませんし、プログラミング始めてそう経ってない場合、多次元配列を思うように操作するのってひとつの壁になったりしますしね。 html上にでるのはフォーマットなしなのでそのままで読み取るのはそれなりに経験ある人でもかんたんではないですし(私は必ずフォーマットかけて読解してます) 特にSQLでSELECTかけたとき、初めてcount()関数使ったときにどうやってキーを指定していいか戸惑ったもんです… 間違えても配列indexのNoticeでるだけなんで色々やってみればいい話なんですが、たぶんそれもなかなか踏み込めないくらいの段階だと踏んでヒント回答してみました。
guest

0

var_dump() は取り出しではありません。情報の表示だけです。
取り出しは fetch() または fetchAll() で行っていると思います。

なぜarray(1)の中にarray(2)が入っているのでしょうか?

これは、そのようになるように貴方がプログラミングしたから(意識しているかは別にして)、ということになりますね。
ATTR_DEFAULT_FETCH_MODE のデフォルトは PDO::FETCH_BOTH なので、特に指定しなければ カラム名 と 添字 の2通りで出力されます。だから2倍表示されます。

array(2) のところを1にしたいのであれば
$stmt->setFetchMode(PDO::FETCH_ASSOC);
としてください。添字での取得がされなくなります。

また、array(1) が気になるのであれば、 fetchAll() ではなく fetch() を使ってください。

下記のようなコードであれば、貴方の思うような挙動になるでしょうか。

php

1$stmt->setFetchMode(PDO::FETCH_ASSOC); 2$stmt->execute(); 3$result = $stmt->fetch(); 4echo $result["truncate(avg(apple),2)"];

取得カラム名が長いので AS を使うのが一般的であることも、覚えておいた方が良いかもしれません。

投稿2019/05/15 01:20

編集2019/05/15 01:20
takepan1973

総合スコア821

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

  • 別名をつける
  • FETCH_ASSOCを利用する
  • prepareなら投入データを分ける

PHP

1$stmt = $this->_db->prepare('select truncate(avg(apple),2) as val from (select apple from pricedata where date between ? and ?) as subquery'); 2$data=["2019-04-01","2019-04-06"]; 3$stmt->execute($data); 4$row=$stmt->fetch(PDO::FETCH_ASSOC); 5print $row["val"];

投稿2019/05/15 00:54

yambejp

総合スコア114806

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

変数[0][0]で解決できました。
また皆様の回答から AS で取得するのが望ましいようなので今後そのようにコードを書いていきたいと思います。ありがとうございました。

投稿2019/05/15 01:55

meka

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問