2016-03-02 71 views
-1

例如一定值时,我有这样的一个表:如何重新排序表在顶部

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'。我无法马上更新应用程序,因此我必须重新排序表格。

+0

请参阅FIELD()。就这样。 – Strawberry

+0

@Strawberry该表没有有限的行数,所以我无法为此函数制作逗号分隔列表。它不适用于ALTER –

回答

-1

我无法找到一个方法来做到这一点不改变表的结构。更新与这种排序工作,所以我必须插入一个新的列,更新它与变量和改变它

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

如果你不知道答案(你为什么?),你没有义务回答。 – Strawberry

+0

什么?当你问一个问题时,你不知道有“回答你自己的问题”的功能吗?每个人都有权回答他们自己的问题,或者不会让我摆在首位。现在删除downvote –

+0

我有一个公平的感觉,该网站的工作原理,谢谢。 RDBMS表中的行没有顺序,所以上面描述的操作是没有意义的 - 我会投票,因为我希望谢谢。 – Strawberry

-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; 
+0

顺便说一句,你为什么如此关心元组的排序?你不应该担心它,而是只是用你的'ORDER BY'选择你要检索数据的地方...... – Coderchu

+0

为什么要创建一个#temp,为什么不'truncate + INSERT INTO table SELECT ORDER' ?? –

+0

@JuanCarlosOropeza正试图证明思想过程,再加上我不是超级leet,SQL lol – Coderchu