2016-03-02 69 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