0

我有一个表(表名是symbols),有两列symbolweight。我想根据重量按降序对该表进行排序。我通过使用做到了这一点

ALTER TABLE symbols ORDER BY weight DESC

上面的语句给了我下面的输出。

x5  0.40
x3  0.20
x4  0.20
x1  0.10
x2  0.10

但我还有一个要限制应用在这种排序中。假设我在表中再添加一条记录 ('x22',0.10)。在 ( ) 的帮助下插入和排序后ALTER TABLE symbols ORDER BY weight DESC,我的表格看起来像

x5  0.40
x3  0.20
x4  0.20
x1  0.10
x2  0.10
**x22   0.10**

但我想得到这样的结果

x5  0.40
x3  0.20
x4  0.20
**x22   0.10**
x1  0.10
x2  0.10

如果表包含具有相同权重的记录,我想让新插入的记录位于顶部。

通过在谷歌上的一些搜索,我知道我的数据库设计很糟糕,应该再添加一列作为时间戳。但是,我已经在表中有数据了,我可以用查询来处理这个,而不改变表结构吗?先感谢您。

4

2 回答 2

1

我可以提醒你

ORDER BY 使您能够创建具有特定顺序的行的新表。请注意,插入和删除后,表不会保持此顺序。
...
ORDER BY 对于包含用户定义的聚集索引(PRIMARY KEY 或 NOT NULL UNIQUE 索引)的 InnoDB 表没有意义。如果存在这样的索引,InnoDB 总是根据这样的索引对表行进行排序。

您可以简单地添加另一列

ALTER TABLE symbols ADD COLUMN created_or_modified timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

然后简单地查询你的表

SELECT * FROM symbols ORDER BY created_or_modified DESC;

或者一个 auto_increment 列也是可能的。

PS:进一步引用手册:

通过在对表进行重大更改后使用此选项,您可能可以获得更高的性能。在某些情况下,如果表按您稍后要对其排序的列进行排序,则可能会使 MySQL 更容易排序。

请注意“可能”一词的广泛使用!

于 2013-11-07T09:22:23.970 回答
0

试试这个:

ALTER TABLE symbols ORDER BY symbol DESC, weight DESC

更新:如果你有一个id列,AUTO_INCREMENT你可以使用这个:

ALTER TABLE symbols ORDER BY weight DESC, id DESC
于 2013-11-07T09:12:22.087 回答