Hi, I have 2 tables: user_badges, and badges table, the following is user_badges table data:
id | user_id | badge_id | points_earned | badges_awarded |
 1    2324        0             5               0
If the user meets the minimum required points, i.e. 5 from the badges table, SQL will update the above as:
id | user_id | badge_id | points_earned | badges_awarded |
 1    2324        1             5               1
If, in future, there is new point registered for the same user, user_table badges will add a new row as follows:
 id | user_id | badge_id | points_earned | badges_awarded |
  1    2324        1             5               1
  2    2324        0             7               0
This is badges table:
badge_id | badge_name | required_points
   1           new          5
   2           adv          10
The problems is I need a query to compare the user_badges table to the badges table, provided that the query must know if the badges have been awarded before or not.
I am using this for Zend applications, need a solution for this problem...
If I understand your question correctly, first you need to get the users for whom badges are not yet awarded before, then using correlated subquery you need to update table user_badges with corresponding highest valid badges_id from badges tables.
UPDATE user_badges a
       INNER JOIN(SELECT DISTINCT user_id, SUM(badges_awarded) AS total_badges_awarded
                  FROM user_badges
                  GROUP BY user_id
                 ) b
             ON a.user_id = b.user_id
                AND b.total_badges_awarded = 0
SET a.badge_id = (@var_badges_awarded_flag:= (IFNULL((
                             SELECT c.badge_id
                             FROM badges c
                             WHERE a.points_earned > c.required_points
                             ORDER BY c.required_points DESC
                             LIMIT 1
                            ), 0))),
    a.badges_awarded = a.badges_awarded + IF(@var_badges_awarded_flag > 0, 1, 0);
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With