0

我正在努力寻找最有效的方法来做某事,并感谢您的建议!

我有一个包含以下列的表格:

id
category
category_sequence
other_columns

id 是一个自增列和主键。类别由用户在 UI 上选择。

我想做的是生成一个category_sequence,这是该类别+ 1 的现有最高category_sequence。

例如,插入几行就像:

  • 1, 1, 1
  • 2, 1, 2
  • 3、2、1
  • 4、1、3

等等。

显然我可以运行一个查询来提取最高的 category_sequence,添加一个,然后运行我的插入语句。但是有没有更有效的方法(一些插入将处于相当大的循环中,所以任何加速它并防止交叉的东西都会很棒)。

在此先感谢,凯夫

4

3 回答 3

1

你可以试试

    insert into mytable
    select "categoryselected",coalesce(max(category_sequence),0)+1 from mytable where category = "categoryselected"

如果它是该类别的第一条记录,您可能还必须将其包装在 case 语句中。我没有mysql来测试它

于 2009-10-12T16:27:37.660 回答
0

假设您有一个类别所指的“类别”表,您可以在那里有一个 next_sequence 字段。然后在您的表上有一个插入触发器,该触发器会提取下一个序列号,将其放入 category_sequence 列,并递增 next_sequence 字段(必须全部在单个事务中完成)。

于 2009-10-12T16:27:31.950 回答
0

您可以通过将 auto_increment 字段更改为 category_sequence 来让数据库执行此操作,然后将主键设为 category+category_sequence。然后您可以删除 id 字段,因为它不会按照您的意愿进行操作。然后,MySql 将完全按照您描述的方式递增 category_sequence 字段。

于 2009-10-12T16:28:17.317 回答