ID非公開さん
2022/5/11 4:56
2回答
PHPとMySQL、PDO接続で商品が複数入っているカート画面を作ろうとしています。 DBのcartテーブルとitemテーブルをJOINで、 selectして下のデータを取得した場合、
PHPとMySQL、PDO接続で商品が複数入っているカート画面を作ろうとしています。 DBのcartテーブルとitemテーブルをJOINで、 selectして下のデータを取得した場合、 これを集計して、 りんご 2個 × 100 = 200円 オレンジ 1個 × 120 = 120 円 とカートに表示する(アイテムごとに個数と金額の合計)にはどうすれば良いでしょうか? ●データベースから取得したデータ array(3) { [0]=> array(5) { ["cartid"]=> string(3) "21" ["itemid"]=> string(1) "2" ["itemname"]=> string(30) "りんご" ["price"]=> string(8) "100"} [1]=> array(5) { ["cartid"]=> string(3) "22" ["itemid"]=> string(2) "7" ["itemname"]=> string(24) "オレンジ" ["price"]=> string(8) "120" } [2]=> array(5) { ["cartid"]=> string(3) "24" ["itemid"]=> string(1) "2" ["itemname"]=> string(30) "りんご" ["price"]=> string(8) "100" } } ●cartテーブル CREATE TABLE cart ( cartid int unsigned not null auto_increment, userid varchar(255) not null, itemid int unsigned not null, deleteflg tinyint(1) unsigned not null default 0, primary key(cartid), ); ●itemテーブル CREATE TABLE item ( itemid int unsigned not null auto_increment, itemname varchar(100) not null, price unsigned not null, primary key(itemid), ); ●テーブル結合 SELECT c.cartid, i . itemid, i . itemname, i.price FROM cart c LEFT JOIN item i ON c.itemid = i. itemid WHERE c.userid = test AND c.deleteflg = 0; ___________試したこと SELECT c.cartid, i . itemid, i . itemname, i.price count( i. itemid ) FROM cart c LEFT JOIN item i ON c.itemid = i. itemid WHERE c.userid = test AND c.deleteflg = 0 group by itemid ;などとグループ化してみたのですが、 上記の書き方だとエラーが出たりして 悩んでいます。色々試していますがよくわからず 解決できません。 初心者なのでお恥ずかしいのですが、 教えてくださると助かります。 よろしくお願いいたします。
PHP・60閲覧・50
ベストアンサー
MySQLはMySQL 5.6とかですか? MySQL 8ですか? MySQL 8ならWindow関数(Oracleでいう分析関数)が実装されており、操作性が大幅に向上しています。 全カートの中から、商品名、商品数、単価、商品毎の合計金額を求めるのでいいのですね? MySQL 5.6などでも動くSQL例です。実機確認はしていませんので悪しからず。 SELECT x.品名,x.個数,x.単価 ,x.個数*x.単価 AS 合計 FROM (SELECT i.itemname AS 品名 ,COUNT(c.itemid) AS 個数 ,i.price AS 単価 FROM item AS i LEFT JOIN cart AS c ON i.itemid=c.itemid WHERE c.userid='ユーザ名' AND c.deleteflG=0 GROUP BY i.itemid,i.itemname,i.price) AS x
GROUP BY i.itemid,i.itemname,i.price は、りんごの価格が2種類あるとか、そういったことも考えて別グループとして集計するようにしました。
質問者からのお礼コメント
お礼が遅くなりすみません!! おかげで無事解決できました!! とても分かりやすく丁寧に書いて下さり本当に助かりました。 この回答の内容をもとに勉強していきたいと思います。 ありがとうございました!
お礼日時:5/17 15:09