Как массово обновить значения в таблице в соответствии с индексом id в массиве?

265
24 июня 2017, 11:27

У меня есть таблица в БД. С полями id, pos. А также есть массив с идентификаторами:

Array ( 
    [0] => 1858 
    [1] => 1863 
    [2] => 1725 
    [3] => 1595 
    [4] => 1834 
    [5] => 1835 
    [6] => 1859 
    // ... и т.д.
) 

Я хочу сделать update в таблице таким образом, чтобы в колонке pos было значение, равное индексу в массиве + 1, то есть для 1858 pos был равен 1, для 1863 - 2, для 1725 - 3 и т.д.

Это можно как-то в один запрос сделать ёмко? Или тут только два пути: 1) в цикле делать update с where 2) в запросе городить гигантский switch/case ?

Answer 1

Можно воспользоваться функцией FIELD:

update table
   set pos=field(id,'1858','1863',...)

UPD Или, по предложению @Akina:

update table
   set pos=find_in_set(id,'1858,1863,...')
READ ALSO
LOAD DATA LOCAL INFILE — не находит файл

LOAD DATA LOCAL INFILE — не находит файл

Интересует сразу несколько вопросов:

349
Неправильный импорт из csv в mysql

Неправильный импорт из csv в mysql

ЗдравствуйтеУ меня имеется такой php код, который заливает данные из csv файла в базу MySQL

211
арифметическое действие mysql c условием

арифметическое действие mysql c условием

Как правильно произвести арифметическое действие на ячейку с условием id_nds=1

243