【问题标题】:Select while inserting?插入时选择?
【发布时间】:2012-07-31 10:55:21
【问题描述】:

我不确定这是否可能,但我正在尝试插入,同时选择一个值来执行 +1。我这样做的原因是因为我的列是自动递增的,但值到处都是。

这是我目前所拥有的,它不会让我插入:

insert into channels set chanid=(select chanid from channels where parent=2
order by chanid desc limit 1)+1

【问题讨论】:

    标签: mysql select insert


    【解决方案1】:

    尝试在子查询中使用别名。它对我有用。

    insert into channels
    set chanid=(
        select c.chanid
        from channels as c
        where c.parent=2
        order by c.chanid desc
        limit 1
    )+1
    

    参考:http://bugs.mysql.com/bug.php?id=6980

    【讨论】:

      【解决方案2】:
      insert into channels(chanid)
      select chanid+1 from channels where parent=2 
      order by chanid desc limit 1 
      

      【讨论】:

      • 不起作用我试图直接在 mysql 中执行此操作,而不是通过 php 页面
      【解决方案3】:

      如果我理解正确你的问题,试试这个!

      insert into channels set chanid=(select chanid+1 from channels where parent=2 order by chanid desc limit 1)
      

      【讨论】:

      • 我之前尝试过这种方式,但它仍然不允许我 - 它说我无法从 udpate 中指定目标表“通道”来自 caluse
      【解决方案4】:

      要重置auto-increment 值,您可以尝试

      SET @var_count = 0;
      
      UPDATE channels 
      SET chanid = (@var_count := @var_count + 1);
      

      删除auto-increment 列并在其上重新创建PRIMARY KEY

      【讨论】:

      • 我仍然需要进行插入...我怎样才能进行插入并获取各自相等值的最后一个 chanid?
      • 您可以使用 LAST_INSERT_ID() 从表中获取最后插入的 id。
      • 请给我一个如何做到这一点的例子——我没有为此使用 php
      猜你喜欢
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      • 2011-08-30
      相关资源
      最近更新 更多