Разбить записи на 3 части одним апдейтом

Тема в разделе "Базы данных", создана пользователем svfolder, 3 мар 2015.

Статус темы:
Закрыта.
Модераторы: latteo
  1. svfolder

    svfolder Постоялец

    Регистр.:
    31 июл 2013
    Сообщения:
    95
    Симпатии:
    39
    Имеется такая таблица в мускуле.

    Код:
    CREATE TABLE `md_process` (
      `id` int(11) NOT NULL,
      `url` varchar(255) default NULL,
      `process` int(11) default '0',
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    Допустим в ней хранится 5-10-30 или более млн записей.

    Задача разделить записи на три части и каждой записи в соответствии из группы 1,2 или 3 присвоить полю process нужное число.
    И сделать это одним запросом UPDATE

    Не перебирать в цикле 50 млн записей и счетчиком считая до 3х сделать 50 млн апдейтов) а одним апдейтом!
     
  2. gvozd

    gvozd Писатель

    Регистр.:
    19 мар 2012
    Сообщения:
    1
    Симпатии:
    1
    Код:
    UPDATE md_process SET process = (id % 3)   + 1;
     
    latteo нравится это.
  3. sultev

    sultev Писатель

    Регистр.:
    13 мар 2015
    Сообщения:
    1
    Симпатии:
    0
    разбиение будет точным, только в том случае если ID идет последовательно и непрерывно. Если будет в ID разрыв в нумерации то БД поделится неровно
     
Статус темы:
Закрыта.