$ u не задано в вашем примере, поэтому я предполагаю, что это будет дополнительно задано в коде, который вы не включили.
У вас есть время l oop, и давайте возьмем, например, этот цикл 10 раз.
В конечном итоге вы выполняете оператор обновления SQL 10 раз, когда вы должны делать это только один раз.
Значение, которое он в конечном итоге обновляет, является значением последнего строка в запросе выбора, которая выглядит так, как будто она равна 0.
Если не приводить пример строк базы данных, для которых вы выполняете запрос, то это все предположение. Если это не решит проблему, вам все равно нужно разобраться с поднятой проблемой обновления.