【问题标题】:How can I do own increment value in mysql如何在mysql中做自己的增量值
【发布时间】:2017-10-06 12:16:01
【问题描述】:

我正在努力做适当的 sql 脚本以特定方式增加字段。

这两个脚本没有任何异常,但结果没有任何反应。

脚本 1:

UPDATE 
   myTable T1, 
   (
       SELECT id, 
              (@s:=@s+1) AS seq
       FROM myTable, (SELECT (@s:=0) AS s ) s 
       WHERE infotext IS NULL ORDER BY grouptext
   ) T2

SET sequence = seq

WHERE T1.id = T2.id

脚本 2:

UPDATE myTable AS target

INNER JOIN (
    SELECT supfault_id, 
           (@s:=@s+1) AS seq 
    FROM myTable, (SELECT (@s:=0) AS s ) s 
    WHERE infotext IS NULL ORDER BY grouptext
) AS ordered ON ordered.id = target.id

SET sequence = seq

【问题讨论】:

  • 你想做什么?插入新记录后更新记录?还是获取最后一个值然后加一?
  • 我有一个表,其中包含添加了新列的记录。所有值都设置为 0。我需要通过特定方式增加这些值。记录有自己的序列值。
  • 目前我需要在视图上进行字母排序并使用排序数据。但我不能在前端进行字母排序,因为将来用户可以选择重新排序。

标签: mysql increment


【解决方案1】:

这个从 table1 获取最后一个 desc 值并加一然后更新 table2:

set @inc = 0;
select cast(valToIncrement as signed) into @inc from
(select REPLACE(fkid,' ','') as valToIncrement from tbl_1 ORDER BY fkid)as a ORDER BY valToIncrement desc limit 1;

update tbl_2 set fkid = @inc + 1 where fkid = 122;

【讨论】:

  • 只需要替换你的表的真实名称和它的列名。
  • 有点难以阅读,但我明白了你的想法。我认为确实存在更清晰的方式来进行增量。实际上,我需要按特定方式进行排序,因此我在脚本中使用子选择来进行更新。在子选择中,我可以按我需要的顺序得到我需要的东西,只需从子选择中通过 seq 更新序列值。
【解决方案2】:

子查询单独运行良好,所以我想知道为什么我不能通过子查询中的 seq 更新我的序列值。

我不是专家,但我觉得需要为我的子查询使用一些虚拟表。

这是内部连接情况的解决方案:

CREATE TEMPORARY TABLE supportGroupSeqcalculation AS 
   SELECT supfault_id, 
          (@s:=@s+1) AS seq
   FROM myTable, (SELECT (@s:=0) AS s ) s 
   WHERE infotext IS NULL
   ORDER BY grouptext;

UPDATE myTable AS target
INNER JOIN supportGroupSeqcalculation AS ordered ON ordered.supfault_id = target.supfault_id
SET sequence = seq;  

DROP TEMPORARY TABLE supportGroupSeqcalculation;

我们可以进入临时表的特定顺序并将其记录为序列值。

临时表不一定要删除,它只存在于当前会话中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 2019-10-01
    • 2012-06-10
    相关资源
    最近更新 更多