我有一个自动增量列。我想根据此自动增量列值更改另一列的值。
another column value ==> (auto increment column value/3) +1
我如何通过查询来做到这一点?有可能吗?
我想在新创建行时这样做。
答案 0 :(得分:3)
新的(id/3)+1)
值是否会改变?
从问题来看,数据仅在插入时存在。自动增量列永远不会改变,因为 是主键,我只会在它上面加入,如果你必须加入它,或者如果它是将来会改变。您可以在插入后从SELECT
查询中获取此派生值。
SELECT id, ((id/3)+1) as derived value from table;
答案 1 :(得分:1)
这是"派生"值,您应该考虑不存储此值,而是在每次需要时在PHP代码中计算它。这是一篇文章,您可以在其中找到有关何时存储派生值的进一步说明:Storing “derived” values vs calculating them on extraction
@Octopi解决方案可以解决您的问题。
答案 2 :(得分:0)
尝试以下方法:
INSERT INTO your_table (your_column)
SELECT (MAX(auto_increment_column) / 3) + 2 FROM your_table;
修改
如果要根据值的数量计算列,请使用:
INSERT INTO your_table (your_column)
SELECT (COUNT(*) / 3) + 2 FROM your_table;
编辑2
您可以使用以下方法完成相同的操作:
INSERT INTO your_table (your_column) VALUES (
(SELECT (MAX(aa.auto_increment_column) / 3) + 2 FROM your_table AS aa)
);
编辑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)。