【问题标题】:How to re-order a table with a certain value at the top如何重新排序顶部具有特定值的表格
【发布时间】:2016-03-02 04:37:50
【问题描述】:

例如,我有一个这样的表:

id
|02|
|01|
|03|
|05|
|04|

我需要更改顶部为 05 的表格:

id
|05|
|01|
|02|
|03|
|04|

SELECT * FROM table1 ORDER BY id=05 desc,id 有效。但我想改变表格。

ALTER TABLE table1 ORDER BY id 可以重新排序表格数据。但是

ALTER TABLE table1 ORDER BY id=05 desc,id 不起作用。

我有一个旧版本不订购表格的应用程序,所以它在顶部显示“02”。我不能很快更新应用程序,所以我必须重新排序表格。

【问题讨论】:

  • 参见 FIELD()。就是这样。
  • @Strawberry 该表的行数没有限制,因此我无法为此函数创建逗号分隔列表。它不适用于 ALTER

标签: mysql alter


【解决方案1】:

ALTER 表不是用来操作数据的,它是用来修改表结构的。您最好的选择是将SELECT 插入临时表TRUNCATE,然后从临时表中重新插入。

类似:

SELECT *
INTO #temp
FROM table1
ORDER BY id=05 desc,id;

TRUNCATE table1;

INSERT INTO table1
SELECT * FROM #temp;

DROP #temp;

【讨论】:

  • 顺便说一句,你为什么这么关心元组的顺序?您不必担心,只需 SELECT 和您的 ORDER BY 在哪里检索数据...
  • 为什么要创建#temp,为什么不truncate + INSERT INTO table SELECT ORDER ??
  • @JuanCarlosOropeza 试图展示思维过程,而且我不是 SQL 的超级 leet 哈哈
  • @Coderchu 正如我所说,无法更改应用程序检索数据的方式。
  • ALTER TABLE 可以永久重新排序表。我可以使用ALTER TABLE table1 ORDER BY id
【解决方案2】:

如果不更改表的结构,我找不到一种方法。 UPDATE 适用于这种排序,所以我必须插入一个新列,用一个变量更新它并改变它

ALTER TABLE table1 ADD COLUMN id2  INT NULL;
SET @i=1;
UPDATE table1 SET id2=(@i:=@i+1) ORDER BY id=05 desc,id
ALTER TABLE table1 ORDER BY id2;

【讨论】:

  • 如果您不知道答案(为什么会这样?),您没有义务回答。
  • 什么?你不知道提问时有“回答你自己的问题”功能吗?每个人都有权回答自己的问题,否则我一开始就不允许。现在删除那个downvote
  • 我对网站的运作方式有一定的了解,谢谢。 RDBMS 表中的行没有顺序,因此您在上面描述的操作毫无意义 - 我会按我的意愿投票谢谢。
  • 尝试使用 MySQL,使用 PRIMARY KEY 创建表,并插入随机数。它具有从第一条记录到您插入的最后一条记录的顺序。你说的是哪种桌子?
猜你喜欢
  • 1970-01-01
  • 2022-06-10
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
相关资源
最近更新 更多