У меня есть четыре таблицы:
- 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 и типом.
Я использую следующий код для получения общего расстояния:
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) в качестве общего значения. Теперь я хочу (60 + 200) * 3 = 780 для пользователя 1 и сохранить идентификатор 101 и значение является фиксированным.