【问题标题】:Delete first row and place copy of row on end of table删除第一行并将行的副本放在表的末尾
【发布时间】:2018-08-06 23:40:47
【问题描述】:

大家好,我有一个 mySQL 数据库,其中有一个名为 queue 的表,其中行包括歌手和歌曲列。我正在使用表格来保持歌手上升的顺序有一个自动增量 ID

我试图找到的正确语法是使用新的自动增量 ID 值将表中的第一行复制到最后一行,然后删除第一行。在我尝试写之前,这似乎不是一个挑战。欢迎任何想法。

自从得到答案后,我尝试了这个.. 但不断收到错误 1111

 UPDATE `queue`
 SET `id` = MAX(id) + 1;
 WHERE `id` = MIN(id);

这个也试过了……怎么这么难。

 Set $max = (SELECT MAX(id) + 1 FROM queue);
 Set $min = (SELECT MIN(id) FROM queue);
 UPDATE `queue`
 SET `id` =  $max
 WHERE `id` = $min;

所以我已经放弃了 max() min() 的想法,除非有人有可用的答案并转向我最初的想法并且我非常接近。但我的问题是我不知道要删除的最低 id 因为它只会是 1 一次所以我需要以某种方式用 MIN(id) 值或变量填充它。这就是我所在的位置。

  INSERT INTO queue (SELECT NULL,singer, song1 FROM queue WHERE id = 1);
  DELETE FROM queue ORDER BY id ASC LIMIT 1; 

【问题讨论】:

  • Mysql不是php,$没有标记变量。 @ 会。

标签: mysql


【解决方案1】:

为什么不只是 UPDATE 使用 SETWHERE 子句来更改其 id 行?

UPDATE `queue`
SET `id` = 21 -- (current_highest_value + 1)
WHERE `id` = 1

这样您就不必担心添加新行和删除旧行。

【讨论】:

  • 非常有趣的想法现在开始研究。需要研究获得最高的 id 值...感谢提示会尝试。也不确定如何在最低 id 为 2 的地方第二次使用它...关闭研究 ty
  • 好吧,非常酷的 MIN() 和 MAX() 函数,看看我能不能让它工作。
【解决方案2】:

我认为一切都很好,只是您需要为删除语句更新 SQL_SAFE_UPDATES = 0,所以您可以尝试以下方式

  SET SQL_SAFE_UPDATES = 0;  
  INSERT INTO queue (SELECT NULL,singer, song1 FROM queue WHERE id = 1);
  DELETE FROM queue ORDER BY id ASC LIMIT 1;

【讨论】:

    猜你喜欢
    • 2013-11-26
    • 2021-05-11
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 2019-11-05
    • 2017-12-07
    相关资源
    最近更新 更多