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

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

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

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

PHP

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

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

3回答

1312閲覧

テーブル内のデータを個数分合計する

toll_tree

総合スコア199

MySQL

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

PHP

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

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2019/05/03 10:29

データベース内の値を、個数分合計するような処理を考えているのですが、うまくいきません。
以下は、自分が作成中のcart.phpになります。

php

1<?php 2 3include 'shop_class.php'; 4 5error_reporting(E_ALL); 6ini_set("display_errors",1); 7session_start(); 8if(!isset($_SESSION['id'])){ 9 header('Location:login.php'); 10} 11 12$shop = new Shop('mysql:host=localhost;dbname=ec_website','root','12345'); 13 14$user_id = intval($_SESSION['id']); 15if($_POST){ 16 // var_dump($_POST); 17 // exit(); 18 19 $product_name = $_POST['name']; 20 $img = $_POST['img']; 21 $price = $_POST['price']; 22 $product_id = intval($_POST['product_id']); 23 $item_check = $shop->cart_check($user_id,$product_id); 24 25 26 if(!$item_check){ 27 // try{ 28 $shop->add_select_item($user_id,$product_id); 29 // }catch(PDOException $e){ 30 // echo $e->getMessage(); 31 // } 32 33 echo __LINE__; 34 //exit(); 35 36 }else{ 37 $shop->update($product_id); 38 echo __LINE__; 39 //exit(); 40 } 41 42} 43 44$item_list = $shop->cart_list($user_id); 45// var_dump($item_list); 46// exit(); 47//exit(); 48// foreach($item_list as $item){ 49// //var_dump($item); 50// $item_info[] = $shop->cart_item_info($item['item_id']); 51// } 52//var_dump($item_info); 53 54foreach($item_list as $item){ 55 $item_info_list[] = $shop->item_info_list($item['item_id']); 56} 57// var_dump($item_info_list); 58// exit(); 59// $sum_price = array_sum(array_column($item_info_list,'price')); 60// var_dump($sum_price); 61// exit(); 62 63$sum_price = 0; 64 65for($i = 0; $i < count($item_info_list); $i++){ 66 for($j = 0; $j < $item_list[$j]['amount'];$j++){ 67 var_dump($item_info_list[$j]['amount']); 68 $sum_price += $item_info_list[$i]['price']; 69 70 71 } 72 73} 74var_dump($sum_price); 75exit(); 76// $test = $item_list[0]; 77// var_dump($test); 78// exit(); 79?>

上記コードの$item_info_listの中身は下記になります。

「array(4) { [0]=> array(3) { ["name"]=> string(18) "テスト" ["price"]=> int(100) ["img"]=> string(53) "./images/f0ab631298df0117d17f6c91955a0be7129de339.jpg" } [1]=> array(3) { ["name"]=> string(7) "test111" ["price"]=> int(1000) ["img"]=> string(53) "./images/4a60837fe9c460ed404f490ca86a61d7c936613b.jpg" } [2]=> array(3) { ["name"]=> string(8) "t-shirt2" ["price"]=> int(1000) ["img"]=> string(53) "./images/cccacab372172c1f63c1351d95df9e792fdd4002.jpg" } [3]=> array(3) { ["name"]=> string(4) "test" ["price"]=> int(1000) ["img"]=> string(53) "./images/a482e68f5a960d0a2c47b8819a178b8b4f21c87c.jpg" } }」


$item_listの中身は以下になります。
「array(4) { [0]=> array(2) { ["item_id"]=> int(13) ["amount"]=> int(23) } [1]=> array(2) { ["item_id"]=> int(15) ["amount"]=> int(2) } [2]=> array(2) { ["item_id"]=> int(17) ["amount"]=> int(1) } [3]=> array(2) { ["item_id"]=> int(14) ["amount"]=> int(2) } }」

$item_info_list['price']の中身を、$item_list['amount']の個数分、増加させたです。
何か良い方法は、ありませんでしょうか?
どなたかご教示いただけましたら幸いです。
よろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/05/03 11:08

var_dump()の出力は改行やインデントが潰れてつながってたり型の説明がついたりして、人が目てみて把握しやすい(それが目的だからね)のだけど、それを受けて第三者がなにか試すとき、結局全部書き直さないと行けなくて困る。serialize()した文字列で貼ってくれれば、第三者もテストしやすいのではないかと、ふと思った。第三者にテストしてもらうためには、どういう情報の出し方が敷居が低くなるかって、考えたことある?
sazi

2019/05/03 20:27

SQLで処理する案件だと思うのですが? それが出来ない理由があるならそれを解決した方が早いと思います。
toll_tree

2019/05/03 20:43

「serialize()した文字列」というのは、どういう文字列でしょうか? そうですね。第三者に分かってもらえなければ意味がないですよね
guest

回答3

0

自己解決

ご回答者様に頂きました回答を元に、下記のコードにて、$item_info_list[$i]'price'の$item_list[$i]'amount'分の合計を、$sum_priceに代入し、for分にて、$item_info_list[$i]の['price']の合計値を求めることができました。
質問が伝わりづらく、すみませんでした。

php

1for ($i=0; $i<count($item_info_list); $i++) { 2 $sum_price += $item_info_list[$i]['price'] * $item_list[$i]['amount']; 3}

投稿2019/05/03 20:54

toll_tree

総合スコア199

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

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

0

意図が分かりづらいけどこんな感じ?

for ($i=0; $i<count($item_info_list); $i++) { $item_info_list[$i]['price'] = $item_info_list[$i]['price'] * $item_list[$i]['amount']; }

投稿2019/05/03 13:25

takasima20

総合スコア7458

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

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

toll_tree

2019/05/03 20:55

頂きました、ご回答を元に、解決することができました。 ありがとうございました。
guest

0

よくわかんないけど、こういうこと?

php

1for($i = 0; $i < count($item_info_list); $i++){ 2 $arr = []; 3 for($j = 0; $j < $item_list[$j]['amount']; $j++){ 4 $sum_price += $item_info_list[$i]['price']; 5 $arr[] = $item_info_list[$i]['price']; 6 } 7 $item_info_list[$i]['price'] = $arr; 8}

これで増えそうな気がするけど。

投稿2019/05/03 11:10

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2019/05/03 11:26

あくまで机上。実データを使ってテストするのが面倒な質問なので。
toll_tree

2019/05/03 20:42

ご回答ありがとうございます。 質問の仕方が悪くて、申し訳ないです。 「for ($i=0; $i<count($item_info_list); $i++) { $sum_price += $item_info_list[$i]['price'] * $item_list[$i]['amount']; }」 こちらの式で、sum_priceに、$item_info_list['price']の$item_list['amount']分合計した値を格納することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問