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

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

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

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

577閲覧

テーブルにデータをinsertするときに平均を求める方法を教えてください。

Yuu412

総合スコア37

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/09/21 16:57

編集2020/09/23 12:40

Laravelでseederを作っている最中です。

以下の画像では、いくつかの項目に乱数で数値を入れていき、平均値を格納するカラムにそれらの数値の平均値を入れたいと思ってコードを書いています。

しかし、

A non-numeric value encountered at C:\Users\○○\git\minlabo\database\seeds\Lab_evaluationTableSeeder.php:59 55| 'prof_friendly' => rand(1.0, 5.0), 56| 'prof_jobhunt' => rand(1.0, 5.0), 57| 'prof_network' => rand(1.0, 5.0), 58| 'prof_experience' => rand(1.0, 5.0), > 59| 'prof_average' => ('prof_care'+'prof_friendly'+'prof_jobhunt'+'prof_network'+'prof_experience') / 5.0, 60| 'job_major' => rand(1.0, 5.0), 61| 'job_small' => rand(1.0, 5.0), 62| 'job_jobhunt' => rand(1.0, 5.0), 63| 'job_recommendation' => rand(1.0, 5.0),

というエラーが出て実装できません。

上手く複数カラムの平均値をinsertする方法はないでしょうか。

<?php use Illuminate\Database\Seeder; class Lab_evaluationTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $univ_array = [ "東京大学","山形大学","北海道大学","徳島大学","島根大学","東北大学", "岡山大学","鳥取大学","新潟大学","熊本大学","佐賀大学","九州大学", "神戸大学","大阪大学","京都大学","関西大学","慶應大学","早稲田大学", "岡山理科大学","香川大学","愛媛大学","高知大学","広島大学","近畿大学", ]; $lab_array = [ "佐藤研究室","谷口研究室","田中研究室","神戸研究室","中田研究室","斎藤研究室","神谷研究室","見城研究室", "南波研究室","梶崎研究室","服部研究室","坂口研究室","田口研究室","高橋研究室","清水研究室","新見研究室", "南研究室","東研究室","手塚研究室","多田研究室","古賀研究室","六条研究室","灰田研究室","馬場研究室", ]; DB::table('lab_evaluation')->insert([ [ 'lab_name' => $lab_array[rand(0, 23)], 'lab_univ' => $univ_array[rand(0, 23)], 'user_id' => rand(1, 19), 'prof_care' => rand(1.0, 5.0), 'prof_friendly' => rand(1.0, 5.0), 'prof_jobhunt' => rand(1.0, 5.0), 'prof_network' => rand(1.0, 5.0), 'prof_experience' => rand(1.0, 5.0), 'prof_average' => ('prof_care'+'prof_friendly'+'prof_jobhunt'+'prof_network'+'prof_experience') / 5.0, ], ]); } }

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

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

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

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

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

kuma_kuma_

2020/09/22 16:52 編集

DBの種類を追加記載してください。DBによってSQLの書き方も変わります。 あと$lab_array,$univ_arrayの定義が無いようにみえますが?
Yuu412

2020/09/23 04:39

DBはMySQLです。 定義に関しては、その上でしているので問題ありません! (動作確認できています。)
kuma_kuma_

2020/09/23 05:35

定義についても記載お願いします > A non-numeric value encountered $で指定されている変数が見つからない場合に発生するエラーです 配列が0~23の間にあるのかの確認も必要ですので。
Yuu412

2020/09/23 12:40

エラー内容の詳細と、定義について記載しました。よろしくお願いいたします。
guest

回答2

0

ベストアンサー

エラーの原因の話

エラー箇所とA non-numeric value encounteredというメッセージからわかることは、
**「数字が要求されているのに数値にならない値が出てきた」**ためにエラーになったということです。

もともとのコードでは、prof_averageに前述の「数値から平均値を算出」しようとしているつもりが、
「文字列から平均値を出そう」というコードにしてしまい、エラーになっています。

平均値を出す話

一回のarray定義内で、数値とその数値を元にした処理をまとめてするのは出来ません。
(定義の時点で数値が未定義のため)

そのため、一度元になる数値を含めた定義を先に行い、その変数を元に平均値算出していくアプローチが必要となります。

php

1// 計算で算出しないもの以外を先行で定義 2$data = [ 3 'lab_name' => $lab_array[rand(0, 23)], 4 'lab_univ' => $univ_array[rand(0, 23)], 5 'user_id' => rand(1, 19), 6 'prof_care' => rand(1.0, 5.0), 7 'prof_friendly' => rand(1.0, 5.0), 8 'prof_jobhunt' => rand(1.0, 5.0), 9 'prof_network' => rand(1.0, 5.0), 10 'prof_experience' => rand(1.0, 5.0), 11]; 12// その数値を元に計算をして追加する 13$data['prof_average'] = ( 14 $data['prof_care'] 15 + $data['prof_friendly'] 16 + $data['prof_jobhunt'] 17 + $data['prof_network'] 18 + $data['prof_experience'] 19) / 5.0; 20 21DB::table('lab_evaluation')->insert([$data]);

投稿2020/09/23 16:37

attakei

総合スコア2738

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

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

0

ソースを拝見した限りでは問題なさそうですね。

原因特定方法ですが以下の様に順番に変更してどの項目でエラーになるか試してみて下さい
これで原因箇所がだいぶ絞り込めます。

テスト1

PHP

1 DB::table('lab_evaluation')->insert([ 2 [ 3 'lab_name' => 'lab_name_test', 4 'lab_univ' => 'lab_univ_test', 5 'user_id' => 1, 6 'prof_care' => 1, 7 'prof_friendly' => 1, 8 'prof_jobhunt' => 1, 9 'prof_network' => 1, 10 'prof_experience' => 1, 11 'prof_average' => 1, 12 ], 13

テスト2

PHP

1 DB::table('lab_evaluation')->insert([ 2 [ 3 'lab_name' => $lab_array[0], 4 'lab_univ' => 'lab_univ_test', 5 'user_id' => 1, 6 'prof_care' => 1, 7 'prof_friendly' => 1, 8 'prof_jobhunt' => 1, 9 'prof_network' => 1, 10 'prof_experience' => 1, 11 'prof_average' => 1, 12 ], 13

テスト3

PHP

1 DB::table('lab_evaluation')->insert([ 2 [ 3 'lab_name' => $lab_array[rand(0, 23)], 4 'lab_univ' => 'lab_univ_test', 5 'user_id' => 1, 6 'prof_care' => 1, 7 'prof_friendly' => 1, 8 'prof_jobhunt' => 1, 9 'prof_network' => 1, 10 'prof_experience' => 1, 11 'prof_average' => 1, 12 ], 13

テスト4

PHP

1 DB::table('lab_evaluation')->insert([ 2 [ 3 'lab_name' => $lab_array[rand(0, 23)], 4 'lab_univ' => $univ_array[0], 5 'user_id' => 1, 6 'prof_care' => 1, 7 'prof_friendly' => 1, 8 'prof_jobhunt' => 1, 9 'prof_network' => 1, 10 'prof_experience' => 1, 11 'prof_average' => 1, 12 ], 13

テスト5

PHP

1 DB::table('lab_evaluation')->insert([ 2 [ 3 'lab_name' => $lab_array[rand(0, 23)], 4 'lab_univ' => $univ_array[rand(0, 23)], 5 'user_id' => 1, 6 'prof_care' => 1, 7 'prof_friendly' => 1, 8 'prof_jobhunt' => 1, 9 'prof_network' => 1, 10 'prof_experience' => 1, 11 'prof_average' => 1, 12 ], 13

テスト6

PHP

1 DB::table('lab_evaluation')->insert([ 2 [ 3 'lab_name' => $lab_array[rand(0, 23)], 4 'lab_univ' => $univ_array[rand(0, 23)], 5 'user_id' => 2.5, 6 'prof_care' => 2.5, 7 'prof_friendly' => 2.5, 8 'prof_jobhunt' => 2.5, 9 'prof_network' => 2.5, 10 'prof_experience' => 2.5, 11 'prof_average' => 1, 12 ], 13

テスト7

PHP

1 DB::table('lab_evaluation')->insert([ 2 [ 3 'lab_name' => $lab_array[rand(0, 23)], 4 'lab_univ' => $univ_array[rand(0, 23)], 5 'user_id' => 19, 6 'prof_care' => 2.5, 7 'prof_friendly' => 2.5, 8 'prof_jobhunt' => 2.5, 9 'prof_network' => 2.5, 10 'prof_experience' => 2.5, 11 'prof_average' => 2.5, 12 ], 13

テスト8

PHP

1 DB::table('lab_evaluation')->insert([ 2 [ 3 'lab_name' => $lab_array[rand(0, 23)], 4 'lab_univ' => $univ_array[rand(0, 23)], 5 'user_id' => 19, 6 'prof_care' => 5, 7 'prof_friendly' => 5, 8 'prof_jobhunt' => 5, 9 'prof_network' => 5, 10 'prof_experience' => 5, 11 'prof_average' => ('prof_care'+'prof_friendly'+'prof_jobhunt'+'prof_network'+'prof_experience') / 5.0, 12 ], 13

投稿2020/09/23 15:48

kuma_kuma_

総合スコア2506

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

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

Yuu412

2020/09/24 01:06

attakeiさんが解決してくれました! kuma_kumaさんは、たぶん僕の最初に出した情報が少なすぎて戸惑わせてしまいました・・・申し訳ないです。 次からは、初期情報をきちんと定義しますので、今後ともよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問