- ベストアンサー
MySQLでの売上集計の方法
- MySQLのSQLで売上集計を行う方法について質問します。
- slipテーブルとsalesテーブルを結合して、特定の会員の一ヶ月前の売上金額の合計を算出したいです。
- 直近のSQLで格闘しているが、期待する結果を得ることができていない状況です。アドバイスをいただけると幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>MySQLのSQLに関する質問ですが、変数で処理して >いるため、PHPカテゴリで質問させて下さい。 発想が逆です。まずMySQLでキチンと動くSQL文を組み立ててから、それの一部を(プレースホルダなどを使って)変数に置換する順番でやるべきです。 MySQLのマニュアルを読んだりphpMyAdminなどでSQL文を実行させて試行錯誤せずに、どうやってSQL文を覚えるのでしょう・・・ >FROMの前にmember_noやsale_slip_no、slip_noなどのカラムを記述するとエラーになったりで、 selectに記述した列は(sumの項目があるので)group by に記述していないといけません(その項目毎に集計すると明示する)。 select slip.member_no, sum(request_money) as total from sales join slip on sales.sales_slip_no = slip.slip_no group by slip.member_no where (ここにwhere条件を列記) where条件にmember_noがあるなら(特定のメンバーの合計だけでいいなら)selectにslip.member_noは不要ですし、griup by もしなくていいです。 select sum(request_money) as total from sales join slip on sales.sales_slip_no = slip.slip_no where (ここにwhere条件を列記) とりえあずphpMyAdminでSQL実行して「どういうエラーになるか」(ここがおかしいという部分が表示されるハズです)を確認してください。 なお「php」という話で言えばネイティブなMySQL関数を使っている時点で論外です。今から書くのであればMySQLiもしくはPDOで書きましょう。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
途中経過をすっとばすとして $one_month_buy_money = $sum_point['SUM(request_money)']; でSUMした集計値を変数に取り込めないというだけの話であれば $sql = "SELECT SUM(request_money) AS total ・・・"; というように別名を付けておき $one_month_buy_money = $sum_point['total']; のように別名でアクセスします
お礼
yambejpさま お世話になっております。毎度ご親切なアドバイスをありがとうございます。 また、ご挨拶が遅れて申し訳ありません。 まだまだ理解が乏しい身、分かっているようで分からないことだらけで、色々なアドバイスはとても勉強になります。 今回のASでの指定の仕方、勉強になりました。 まだまだ見直すべきところがありますが、とりあえず正常に稼働するまでに至りました。 ありがとうございました。
お礼
agunuzさま ご親切なアドバイスをありがとうございます。 また、ご挨拶が遅れて申し訳ありません。 > なお「php」という話で言えばネイティブなMySQL関数を使っている時点で論外です。 > 今から書くのであればMySQLiもしくはPDOで書きましょう。 やはりそうなんですね。自身、PHPとMySQLをサイト構築のために同時に勉強を始めた(当初購入した本が同時に話を進めていた)ので、うまく言えませんが同じ延長線上で物事を考えていました。 まだ、一部WEHER句においてMySQLでの関数が残っているので、この処理をどうしようか?など課題はありますが、SQLを見直し期待している結果を得ることが出来ました。 貴重なアドバイスをありがとうございます。