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

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

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

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

PHP

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

Q&A

解決済

1回答

371閲覧

月々ごとに集計テーブルを表示させたい

yuic.sk12345

総合スコア6

MySQL

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

PHP

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

0グッド

0クリップ

投稿2023/05/17 06:30

実現したいこと

①mysql上のテーブル:t_general(トランザクションデータ)に作成した果物名ごとに(kind_id)、月々ごとに集計テーブルを表示させたい。

前提

php、mysqlで登録・集計システムを作っています。

発生している問題・エラーメッセージ

なし。

該当のソースコード

sql

1SELECT kind_id, count(kind_id), kinds.kind AS kind_name FROM t_general LEFT JOIN kinds ON t_general.kind_id=kinds.id GROUP BY kind_id" //(betweenはどうしようか検討中です。。。)

試したこと

②一旦、以下のSQLで、果物名ごとのt_generalの集計はできました。
SELECT kind_id, count(kind_id), kinds.kind AS kind_name FROM t_general LEFT JOIN kinds ON t_general.kind_id=kinds.id GROUP BY kind_id"(betweenはどうしようか検討中です。。。)

補足情報(FW/ツールのバージョンなど)

この次は、予めmysqlに年月カラムと果物名ごとの(kind_id)カラム(全28カラム)からなるkind_totalテーブルを作成し、②の集計結果をkind_totalテーブルにinsertしていけばよいかと考えています。

<kind_totalテーブル>
あけび アサイー アセロラ  かぼす...28カラム
2023/3月 2  3  2  3
2023/4月 1  4  1  1
2023/5月 1  2  4  3
※これ以降の月は、t_generalテーブルから常に取得するので、その月になったら自動集計させて6月1になったら、自動的に2023/6月のレコードができる。
例えば、2023/6月1日時点で、あけびが2個なら、(あけびアサイーアセロラ かぼす..)は(2、0、0,0...)となる

どのようにしたら、mysql上に作成した日報テーブル上に登録することができますでしょうか?

<t_generalテーブル>
-- テーブルの構造 t_general--

CREATE TABLE t_general (
id int(11) NOT NULL,
yearsExp int(11) NOT NULL,
level_id int(11) NOT NULL,
dateOccurre1 date NOT NULL,
・・・
kind_id int(11) NOT NULL,

<>
-- テーブルのインデックス t_general

ALTER TABLE t_general
ADD PRIMARY KEY (id),
・・・
ADD KEY kind_id (kind_id),

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

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

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

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

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

yambejp

2023/05/17 07:06 編集

どういったデータからどういった結果をほしいのでしょうか? 例示されたデータがちょっと分かりづらいです。 28個の果物は絶対に増減ないという認識でしょうか? 特定期日時点の在庫データをDBに記載していくなら、それは月末最終日の在庫をみればいいですし・・・ フルーツごとに個々の増減データを日付入りでデータをもって一日何度でも変更されるというならそういう処理が必要になりますので、要求定義次第ですね
m.ts10806

2023/05/17 07:03

テーブル定義も一応コードなのでマークダウンのcodeで、可能な限り省略無しでご提示ください。 ※使わないカラムとかあるのでしたら「…」のようにせず、なしの状態で詰めて提示を。ただ、提示されない情報は考慮できないので、不具合や副作用の懸念から、やはり省略しないのがベター
logres_Fan

2023/05/17 09:03

> ②の集計結果をkind_totalテーブルにinsertしていけばよいかと考えています。 クロス集計表示に非対応でしたっけ?それはさておき、見ずらいです。年月、商品、数値、改行を繰り返して、縦方向に並べて下さい。
yuic.sk12345

2023/05/22 08:58

@yambejp様 <28個の果物は絶対に増減ないという認識でしょうか? 増減は無しとなります。 @m.ts10806様 <テーブル定義も一応コードなのでマークダウンのcodeで、可能な限り省略無しでご提示ください。 以後省略なきよう付けます。 @logres_Fan様 ind_totalテーブルにinsert方法も検討しました。ただ、どのタイミングで、誰がinsert処理を実行するのか? 仮にバッチ処理をした場合、テスト環境が整っていないので、自動化も少し難しいと感じました。 そこで、みなさまからのいただいたアドバイスを反芻し、t_generalテーブルの集計を、見やすく表示できるかを検討させていただきます。 ありがとうございました。
m.ts10806

2023/05/23 01:02

質問は編集できますので、いつくるかわからない以後に回すのではなく、今対応しましょう。
guest

回答1

0

ベストアンサー

集計を想定するとこんな感じがよいのでは?

SQL

1create table fruit (fid int primary key,val varchar(20)); 2insert into fruit values 3(1,'あけび'), 4(2,'アサイー'), 5(3,'アセロラ '), 6(4,'かぼす'); 7 8create table move(id int primary key auto_increment,d date,fid int not null,quantity int); 9insert into move(d,fid,quantity) values 10('2023-05-01',1,10), 11('2023-05-01',1,-1), 12('2023-05-01',2,2), 13('2023-05-02',1,5), 14('2023-05-03',1,20), 15('2023-05-05',2,3), 16('2023-05-31',3,-10), 17('2023-06-01',1,100);

集計

SQL

1select 2date_format(d,'%Y%m') as `年月`, 3sum((fid=1)*quantity) as `あけび`, 4sum((fid=2)*quantity) as `アサイー`, 5sum((fid=3)*quantity) as `アセロラ `, 6sum((fid=4)*quantity) as `かぼす` 7from move 8group by `年月`;

運用上はprocedureを作っておくと自動化できます
集計を効率的に行うには工夫が必要です

投稿2023/05/23 01:24

yambejp

総合スコア114835

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

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

yuic.sk12345

2023/05/23 01:33

yambejpさま 具体的なコードも含め、ありがとうございます!! <<運用上はprocedureを作っておくと自動化できます 当方勉強不足で、procedureとは、stored-procedures(https://www.php.net/manual/ja/mysqli.quickstart.stored-procedures.php)のことでしょうか? いまだ、procedureは使用したことがありませんが、自動化に必要な処理としてもう少し勉強深めます。 今振り返ると、プログラミングによる「集計」、エクセルなどの表計算ソフトの「集計」とは、まるでちがう複雑な知識が必要であることがわかりました。。。 ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問