2011-10-17 73 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;' –