やりたいこと
現在日付2017-03-31
テーブル名 points 中身 id |user_id |point | expiration_date 1 | 1 |100 |2017-01-21 2 | 1 |400 |2018-12-31 3 | 2 |300 |2016-05-09 4 | 2 |200 |2017-10-21 5 | 3 |100 |2018-03-20 6 | 3 |1000 |2016-10-21
テーブル名 members 中身 id |user_id |point 1 | 1 |10000 2 | 2 |4000 3 | 3 |3000 4 | 4 |2000
ーーーーーーーーやりたいロジックーーーーーーー
①pointsテーブルから有効期限が今日までのポイントをユーザーごとに合計し算出。※これをORMで記載
---SQLではこうしていました--- select SUM(point) from points where user_id = ユーザーID and expiration_date >= now(); --group by-- select user_id,SUM(point) from points where expiration_date >= now() group by user_id; 結果 user_id|SUM(point) 1 | 100 2 | 200 3 | 100
②①で取得したポイントの合計データとmembersテーブルのポイントをuser_id同士で比べ、
①で取得したポイント<membersのポイントの場合
membersのポイント - ①で取得したポイントmembersのポイント = $引かれたポイント数を表示する。
ーーーーーーーーーーーーーーーーーーーーーーーーーー
foreachで毎回idで検索クエリを流しDBからデータを取得するやり方は好まれないので、
pointsテーブル、membersテーブルそれぞれ一回ずつgroup byか何かを使ってそれぞれのテーブルから一回ずつのデータの取得で実現するにはどうすれば良いでしょうか?
自分が考えていたのは毎回ループにて取得をしようとしていたのですがそれではダメだと言われたのでお力を貸していただきたいです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/03 00:55