изменение существующих повторяющихся записей в mysql

извините за (вероятно) нубский вопрос, но я новичок в этом деле.

У меня есть таблица со столбцом "позиция", и я хочу при вставке новой строки изменить позиции каждой строки, позиция которой ниже вставленной строки. например, если я добавляю строку с позицией 4, если есть дубликат, он должен стать 5, 5 должен сместиться на 6 и так далее...

Кроме того, есть ли способ получить максимальное значение для столбца, кроме тестирования его в каждой строке через php?


person Mladen    schedule 10.05.2010    source источник


Ответы (1)


Вам нужно два запроса. Предполагая, что вы знаете позицию, которую вы вставляете, увеличьте позицию каждой строки, позиция которой больше или равна позиции, которую вы вставляете:

UPDATE table SET position = position + 1 WHERE position >= newPosition

После этого можно вставить newPosition, и дубликатов не будет:

INSERT INTO table SET position = newPosition

Чтобы получить наибольшее значение, вы можете использовать MAX()

SELECT MAX(position) FROM table
person Tatu Ulmanen    schedule 10.05.2010
comment
блин, это работало только для одной строки. Если у меня есть более одной строки, которые необходимо обновить, mysql говорит: Повторяющаяся запись «2» для ключа «позиция». Любая помощь? - person Mladen; 11.05.2010
comment
не обращайте внимания на мой последний пост, я оставил «уникальный» ключ на позиции ... отлично работает - person Mladen; 11.05.2010