2015-08-19 6 views
0

У меня возникла особая проблема, которую я хотел бы решить в SQL. Мне нужно убедиться, что optionOrder для одного и того же идентификатора вопроса отправляется из 0- [любого номера].Изменить значения столбца так, чтобы они были в порядке

Так, например, строки с QuestionID = 18386, их optionOrder сейчас находятся 1,2,3,4. Они должны быть 0,1,2,3.

Кроме того, если строки, как этот 1,2,4, он должен быть 0,1,2

Я извиняюсь за некорректные грамматики.

enter image description here

+0

Итак, что вы хотите сделать? изменить нумерацию параметров после их заказа? –

+0

, может быть, оставить их так, как они есть, и использовать силу порядка 'order by'. – Drew

+0

Возможно, вы захотите посмотреть http://stackoverflow.com/questions/1895110/row-number-in-mysql –

ответ

3

В MySQL, вы можете сделать это с помощью переменных:

set @rn := 0; 
set @q := -1; 

update table t 
    set optionorder = (case when @q = questionid then (@rn := @rn + 1) 
          when (@q := questionid) is not null then (@rn := 0) 
          else -1 -- should never happen 
         end) 
    order by questionid, optionorder; 

Из-за order by, вам необходимо установить переменные вне update.

+0

Работает отлично! Я возился с переменными в моей последней попытке, но мне никогда не удавалось работать, если заявление работает, большое спасибо! – Doodlemeat

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