Есть запрос:
| Код |
UPDATE `sites` s, `site_pages` sp, `page_link` p, `seo_properties` se, `level` l, `pr_price` pr, `user_seo` u SET p.old_price = IF ( ( ( ( SELECT `value` FROM `properties` WHERE `name` = 'threeshold' ) >= ( (se.price*pr.price*l.price)/p.price - 1 ) ) AND ((se.price*pr.price*l.price)/p.price - 1) != 0 ) ,p.price,p.old_price ), p.status = IF ( ( ( SELECT `value` FROM `properties` WHERE `name` = 'threeshold' ) >= ( (se.price*pr.price*l.price)/p.price - 1 ) AND ((se.price*pr.price*l.price)/p.price - 1) > 0 ),'9','2' ), u.rating = u.rating - IF ( ( (TO_DAYS(NOW()) - TO_DAYS(p.date)) <= 30 ) AND ( ( SELECT `value` FROM `properties` WHERE `name` = 'threeshold' ) >= ( (se.price*pr.price*l.price)/p.price - 1 ) ) AND ( ( (se.price*pr.price*l.price)/p.price - 1 ) > 0 ),30 - (TO_DAYS(NOW()) - TO_DAYS(p.date)),0 ), p.price = IF ( ( SELECT `value` FROM `properties` WHERE `name` = 'threeshold' ) >= ( (se.price*pr.price*l.price)/p.price - 1 ),se.price*pr.price*l.price,p.price ) WHERE s.id = '$_GET[id]' AND s.id_user = '$id_user' AND sp.id_site = '$_GET[id]' AND sp.level = l.level AND p.id_page = sp.id AND p.status = '2' AND sp.pr = pr.pr AND se.id_site = s.id AND l.id_site = s.id AND pr.id_site = s.id AND s.id_user = u.id
|
Проблема заключается в том, что значение поля u.rating обновляется только один раз, хотя по запросу должно обновиться при каждом обновлении поля p.status. Т.е., если в таблице обновлено 3 строки с полем p.status, то должно 3 раза происходить вычетание в поле u.rating, а происходит вычетание только 1 раз и которое должно быть последним. Почему так происходит, может кто разберётся и сможет помочь. Да, на условие проверки даты не смотреть, это условие соответствует для обновления.
Если есть возможность оптимизации кода, только буду благодарен за советы. |