MySQL - 基于其他列的自动填充列

时间:2017-11-04 13:45:25

标签: mysql sql autocomplete innodb

我是一个非常缺乏经验的SQL用户。我从来没有真正使用SQL来自动填充列。主要是SELECTS(JOINS等)。

我有一个表格,我想将值填入article_order列,以便为每个id_issue订购id_article。

我在-package

上有这个例子
+------------------------+----------+------------+---------------+
| id_issue_article_issue | id_issue | id_article | article_order |
+------------------------+----------+------------+---------------+
|                      1 |        1 |          1 | NULL          |
|                      2 |        1 |          2 | NULL          |
|                      3 |        2 |          3 | NULL          |
|                      4 |        2 |          4 | NULL          |
|                      5 |        2 |          5 | NULL          |
+------------------------+----------+------------+---------------+
Desired table
+------------------------+----------+------------+---------------+
| id_issue_article_issue | id_issue | id_article | article_order |
+------------------------+----------+------------+---------------+
|                      1 |        1 |          1 |             1 |
|                      2 |        1 |          2 |             2 |
|                      3 |        2 |          3 |             1 |
|                      4 |        2 |          4 |             2 |
|                      5 |        2 |          5 |             3 |
+------------------------+----------+------------+---------------+

我正在寻找一些解决方案,我可能错过了一些东西,但我仍然无法理解。 即使提示也会有所帮助。 非常感谢!

1 个答案:

答案 0 :(得分:0)

这在MySQL中有点棘手,但您可以使用变量来实现:

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

update t
    set article_order = if(@ai = id_issue, @rn := @rn + 1,
                           if(@ai := id_issue, @rn := 1, @rn := 1
                             )
                          )
    order by id_issue, id_article;