Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Не совсем правильно работает запрос


Автор: Kuznec 20.3.2008, 22:15
Есть запрос:

Код


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 раз и которое должно быть последним. Почему так происходит, может кто разберётся и сможет помочь. Да, на условие проверки даты не смотреть, это условие соответствует для обновления.

Если есть возможность оптимизации кода, только буду благодарен за советы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)