【发布时间】:2018-10-30 11:30:51
【问题描述】:
我有四张桌子:
- mls_category
- points_matrix
- mls_entry
- bonus_points
我的第一个表(mls_category)如下:
*--------------------------------*
| cat_no | store_id | cat_value |
*--------------------------------*
| 10 | 101 | 1 |
| 11 | 101 | 4 |
*--------------------------------*
我的第二张表(points_matrix)如下:
*----------------------------------------------------*
| pm_no | store_id | value_per_point | maxpoint |
*----------------------------------------------------*
| 1 | 101 | 1 | 10 |
| 2 | 101 | 2 | 50 |
| 3 | 101 | 3 | 80 |
*----------------------------------------------------*
我的第三张表(mls_entry)如下:
*-------------------------------------------*
| user_id | category | distance | status |
*-------------------------------------------*
| 1 | 10 | 20 | approved |
| 1 | 10 | 30 | approved |
| 1 | 11 | 40 | approved |
*-------------------------------------------*
我的第四张表(bonus_points)如下:
*--------------------------------------------*
| user_id | store_id | bonus_points | type |
*--------------------------------------------*
| 1 | 101 | 200 | fixed |
| 2 | 102 | 300 | fixed |
| 1 | 103 | 4 | per |
*--------------------------------------------*
现在,我想根据 store_id、user_id 和 type 将奖励积分值添加到总距离的总和中。
我正在使用以下代码来获取总距离:
SELECT MIN(b.value_per_point) * d.total_distance FROM points_matrix b
JOIN
(
SELECT store_id, sum(t1.totald/c.cat_value) as total_distance FROM mls_category c
JOIN
(
SELECT SUM(distance) totald, user_id, category FROM mls_entry
WHERE user_id= 1 AND status = 'approved' GROUP BY user_id, category
) t1 ON c.cat_no = t1.category
) d ON b.store_id = d.store_id AND b.maxpoint >= d.total_distance
上面的代码计算值是正确的,现在我想加入我的第四张表。
这给了我总和 (60*3 = 180) 作为总值。现在,我想要用户 1 的 (60+200)*3 = 780 并存储 id 101 并且值是固定的。
【问题讨论】: