2015-10-24 7 views
1

У меня есть столбец автоматического увеличения. Я хочу изменить значение другого столбца на основе этого значения столбца автоматического увеличения.Mysql изменить одно значение столбца на основе другого столбца

another column value ==> (auto increment column value/3) +1 

Как мне это сделать с помощью запроса? Является ли это возможным?

Я хочу сделать это для создания новых строк.

+0

Вы хотите изменить его на _existing_ rows в своей таблице или убедиться, что вновь вставленные строки имеют производное значение? –

+0

Причина для downvote? –

+0

Это не мое, но я подозреваю, что это потому, что вы не показывали предыдущие попытки или не приводили контекст того, когда и как вам нужно делать это действие (вот почему я спросил). –

ответ

0

Попробуйте следующее:

INSERT INTO your_table (your_column) 
    SELECT (MAX(auto_increment_column)/3) + 2 FROM your_table; 

EDIT

Если вы хотите, чтобы вычислить столбец в зависимости от количества значений используйте:

INSERT INTO your_table (your_column) 
    SELECT (COUNT(*)/3) + 2 FROM your_table; 

EDIT 2

Вы может выполнить одно и то же использование:

INSERT INTO your_table (your_column) VALUES ( 
    (SELECT (MAX(aa.auto_increment_column)/3) + 2 FROM your_table AS aa) 
); 

EDIT 3

Для более столбцов вы можете использовать что-то вроде этого:

INSERT INTO your_table (your_column, some_other_column) VALUES ( 
    (SELECT (MAX(aa.auto_increment_column)/3) + 2 FROM your_table AS aa), some_other_column 
    ); 

Вы можете найти больше информации здесь: Select from same table as an Insert or Update

На самом деле вы должны добавить +2 потому что это 1 из вас правило и +1 для увеличения MAX (id).

1

Это «производное» значение, и вы должны не хранить это значение, а вычислять его в своем PHP-коде каждый раз, когда вам это нужно. Вот сообщение, в котором вы можете найти дополнительные пояснения о том, когда хранить производные значения: Storing “derived” values vs calculating them on extraction

@Octopi решение может решить вашу проблему.

+0

+1, я использовал сегмент вашего ответа в своем ответе, потому что я думаю, что вы должны сделать все это в mysql, а не оставлять его на php. –

+1

Вы правы ... но я предполагал, что запрос mysql может быть написан внутри класса PHP. –

3

Возможно ли новое значение (id/3)+1)?

Судя по вопросу, данные существуют только во время ввода. Столбец автоинкремента никогда не изменится, так как он имеет, чтобы быть основным ключом, я бы только вставлял его, если вам нужно присоединиться к нему или , если он будет изменяться в будущем. Вы можете получить это производное значение из запроса SELECT после вашей вставки.

SELECT id, ((id/3)+1) as derived value from table; 
+0

Если это нужно изменить, я могу изменить свои инструкции PHP. Да Ваши предположения верны –

+0

Для чего вы используете это новое значение? –

+0

Чтобы определить идентификатор проверки. Первые 3 вопроса относятся к test1. (0/3) +1, (1/3) +1, (2/3) +! –

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