前提・実現したいこと
PHPとSQLの学習で、販売管理システムを作りながら学習しています。
次のような列を持った売掛残高画面を作成しているのですが、上手くいかず、
改善したいと思い質問させていただきます。
※まだ学習中で、そもそもSQLが間違えているかもしれないです。
<一覧表に必要な項目>
・得意先コード
・前月末残高
・当月入金額
・当月売上額
・消費税額
<データベース>
・売上データ (uriage_dt)
id int(11)
cd int(11)
nendo int(11)
tekiyou varchar(32)
uriagebi date
tokuisaki_mr_cd varchar(14)
torihiki_kbn_cd varchar(2)
・売上明細データ (uriage_meisai_dt)
id int(11)
cd int(11)
uriage_dt_id int(11)
shouhin_mr_cd varchar(20)
tekiyou varchar(40)
suuryou double
genka double
tanka double
kingaku int(11)
genkagaku int(11)
zeinukigaku int(11)
zeigaku int(11)
・入金データ (nyuukin_dt)
id int(11)
cd int(2)
nendo int(11)
nyuukinbi date
tokuisaki_mr_cd varchar(14)
tantou_mr_cd varchar(3)
zenkai_kesikomi_gaku int(11)
・入金明細データ (nyuukin_meisai_dt)
id int(11)
cd varchar(2)
name varchar(24)
nyuukin_dt_id int(11)
nyuukin_kbn_cd varchar(3)
kingaku double
該当のソースコード
SQL
3つのSQLを使用して、前月末残高と当月データを作成してPHPでループし配列をマージしています。
<得意先マスタ取得>
select cd as tokuisaki_mr_cd from tokuisaki_mrs
<前月残高>
select
uri.tokuisaki_mr_cd as tokuisaki_mr_cd ,
sum(uri_meisai.zeinukigaku) as zeinukigaku,
sum(uri_meisai.zeigaku) as zeigaku,
sum(nyu_meisai.kingaku) as nyuukingaku
from uriage_meisai_dt as uri_meisai
left join uriage_dt as uri on uri.id = uri_meisai.uriage_dt_id
left join nyuukin_dt as nyu on nyu.tokuisaki_mr_cd = uri.tokuisaki_mr_cd
left join nyuukin_meisai_dt as nyu_meisai on nyu_meisai.nyuukin_dt_id = nyu.id
where uri.uriagebi >= '2019-10-31'
group by uri.tokuisaki_mr_cd
※結果取得したものをPHPで zeinukigaku + zeigaku - nyuukingaku をして前月末残高としています。
<当月データ>
select
uri.tokuisaki_mr_cd as tokuisaki_mr_cd ,
sum(uri_meisai.zeinukigaku) as zeinukigaku,
sum(uri_meisai.zeigaku) as zeigaku,
sum(nyu_meisai.kingaku) as nyuukingaku
from uriage_meisai_dt as uri_meisai
left join uriage_dt as uri on uri.id = uri_meisai.uriage_dt_id
left join nyuukin_dt as nyu on nyu.tokuisaki_mr_cd = uri.tokuisaki_mr_cd
left join nyuukin_meisai_dt as nyu_meisai on nyu_meisai.nyuukin_dt_id = nyu.id
where uri.uriagebi between '2019-11-01' and '2019-11-30'
group by uri.tokuisaki_mr_cd
あとは取得したデータをPHPで得意先マスタへループしながら入れています。
出来れば、1回のSQLで一覧表が作成できると助かります。
よろしくお願い致します。
あなたの回答
tips
プレビュー