2013-09-18 6 views
3

Мне нужно уметь обновлять каждую строку строки even (2, 4, 6 и т. Д.) В столбце image ... имя заканчивается расширением .png, и я хочу вставить некоторый текст перед .jpgMySQL: обновить каждую строку второй строки

Так от MyImage.png до MyImage-Small.png

Тогда мне нужно, чтобы быть в состоянии сделать то же самое для каждого odd (1, 3, 5, и т.д.) ряд

+1

Только не точный запрос, который я делал раньше ... на самом деле не обязательно быть ослом, парень. Тот факт, что вы нашли время, чтобы написать этот комментарий, что-то говорит о вас. Либо помогите, либо сделайте поход. – dcolumbus

+1

Хорошо ... извините, человек .. – aldanux

+1

Как вы различаете строки «четный» и «нечетный»? Как называется таблица? Каковы имена столбцов? ('CREATE TABLE' будет хорошо.) –

ответ

10

Предполагая, что таблица имеет числовой первичный ключевой столбец id, вы можете сделать это для четных строк:

update mytable set picture = replace(picture, '.png', '-Small.png') where id % 2 = 0; 

Точно так же просто изменить предикат id % 2 = 1 для нечетных строк

1

Если таблица не имеет цифровой ключа, который является непрерывной последовательностью, то мы еще можем добиться селективных обновлений для нечетных и четных строк, используя следующее обновление.

UPDATE mytable o 
INNER JOIN 
    (SELECT id, @row :[email protected] +1,mod(@row,2) AS num 
     FROM mytable, (SELECT @row := 0) r)AS t 
    ON o.id = t.id -- any indexed field which is unique for the table 
    SET o.image = 
     CASE num 
      WHEN 0 THEN 'even_row' 
      WHEN 1 THEN 'odd_row' 
     END; 

Все это запрос делает генерирует последовательность для таблицы затем присоединиться к нему с исходной таблицей поэтому мы обновляем четных и нечетных строк отдельно.

Смежные вопросы