2011-10-17 72 views
0

每當我手動插入數據到我的sql數據庫中時,它不會自動評估自己。這是一個小小的不便,但它仍然存在。SQL數據庫在更新時不會自動排序?

另外,未來的問題將會快速接近。它按數字排序,但僅以第一位數字排序。在每個條目的開頭都有一個數字,這是我想要分類的。我很快接近百位數字標記,它將根據第一位數字在二十多歲時排序爲十位。

+1

一個數據庫不關心順序 - 這純粹是語義的,因爲你可能想要提升而別人想要降序等。這聽起來像你的表設計很差,結合你需要成爲單獨的列。 –

+0

請勿使用字符串來存儲數字數據。或者,當您必須使用字符串存儲數字時,請使用前導零(或空格)以防止誤解(並且前導零可爲您的數據帶來令人愉快的1960年代感覺)。 –

回答

2

在SQL數據庫中沒有「自動排序」這樣的事情。您必須在每個查詢中指定您想要的ORDER BY

表中的數據固有地未排序。某些數據庫將根據聚簇索引對磁盤上的行進行排序,但在您編寫的查詢中依賴此操作會導致查詢鬆散且脆弱。

0

SQL數據庫未排序 - 記錄本質上是到達順序。爲了按照排序順序檢索記錄,您必須指定一個排序它們的關鍵字。

0

你說它沒有排序(就像別人說的那樣,沒有本地排序行爲),但是接下來你要說明它是如何排序的,所以這部分問題有點令人困惑。

您描述的排序行爲是正確的。在文本類型字段中有數字,因此它們按照詞彙而非數字排序。如果您需要數字排序,則需要將該信息放在具有數字數據類型的字段中,並在ORDER BY子句中使用該字段。

0

沒有自動排序的東西。你必須自己排序。您對數字的排序問題,這裏是我的解決方案:

SELECT tbl AS(
select CAST(SUBSTRING(<field>',1,instr(<field>',' ') as INT),<field> 
//I would then use a UNION ALL statement, something like this 

SELECT CAST(SUBSTRING(<field>',1,instr(<field>',' ') as INT) as 'SortingField',<field>,A.* 
FROM <table> A 
WHERE <field> LIKE <regular expression to get fields beginning with numbers> 
UNION ALL 
SELECT 999999 as 'SortingField',<field>,A.* 
FROM <table> A 
WHERE <field> NOT LIKE <regular expression to get fields beginning with numbers>) 
ORDER BY tbl.SortingField 

我沒有在MySQL的這檯筆記本電腦,但我希望這會有所幫助。這對我有很大的幫助。

0

你可以,如果你使用phpMyAdmin,和你想要的東西在您每次查看錶時間排序使用

**ORDER BY** yourcolumn DESC // Descending 

*ORDER BY** yourcolumn ASC // Ascending 
2

,只是這樣做:

  1. 選擇表格
  2. 點擊頂部菜單上的操作
  3. 在左上角,它說:「ALTER TABLE順序按」
  4. 選擇要對它進行排序哪種方式,和擊去

現在,每當你回到那個表的時候,這將是按您選擇的方式排序。

+0

歡迎來到StackOverflow。在問題中沒有提到網頁或phpAdmin。這完全是一個數據庫問題,因此您的文章不回答問題。您可能希望在開始獲得降薪之前將其刪除。 (我知道現在並不重要,但可能會在您獲得某些聲譽並且將來有人看到這個錯誤答案時)。 –

+1

他所做的一點是運行類似於以下查詢:ALTER TABLE unsorted_data ORDER BY columnA,columnB;' –