сбросить значение столбца с 1 на счет - PullRequest
0 голосов
/ 18 марта 2020

Мне нужно обновить значение столбца с автоматическим приращением. Например:

id  |  value  |  
---------------
1   | abc     |  
2   | def     |  
16  | sdfs    |
361 | dsffs   |

Мне нужно перевести его в

id  |  value  |  
---------------
1   | abc     |  
2   | def     |  
3   | sdfs    |
4   | dsffs   |

Для подсчета всех значений в этой таблице. Также необходимо отметить, что в этой таблице есть 3 внешних ключа для столбца id, и когда я пытаюсь использовать этот запрос для обновления значения столбца, происходит сбой с повторяющейся ошибкой, даже если ни в одной из этих записей нет записи с этим значением. столы

set @row_number = 0;
UPDATE
  cms_page AS page,
  (
  SELECT
    (@row_number := @row_number + 1) AS id,
    page_id
  FROM
    cms_page
  ORDER BY page_id    
) AS new_id
SET 
  page.page_id = new_id.id

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Я настоятельно рекомендую вам не делать этого. Однако один простой метод использует два обновления. Предположительно идентификаторы являются числами и никогда не бывают отрицательными. Итак:

update cms_page
    set page_id = - page_id;

set @row_number = 0;

update cms_page
    set page_id = (@row_number := @row_number + 1)
    order by page_id desc;  -- remember, it is now negative

Если у вас есть каскадные ограничения update - которые необходимы для того, чтобы это действительно работало для ссылок на таблицы - тогда все будет обновлено дважды. Убедитесь, что у вас достаточно места для журнала!

0 голосов
/ 18 марта 2020

Вы можете использовать оператор select, обновление изменит базовые данные, и у вас возникнут проблемы, если соответствующие данные будут доступны в другой таблице:

select page.*, 
      (select count(*) 
       from cms_page as page1 
       where page1.id <= page.id
      ) as new_id
from cms_page as page;

Это предполагает, что id s выполняется последовательно как вы заявили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...