用MySQL自然排序?

时间:2010-06-21 03:44:34

标签: mysql sorting

我正在尝试查询Wordpress数据库并获取帖子标题以正确的顺序排序。 标题格式如下:标题1,标题2 ..我需要按升序对它们进行排序,我该怎么做?如果我只是按升序排序,他们就会出现:1,10,11 ......

现在我的声明是这样的,但它没有做任何事情:

ORDER BY CONVERT(p.post_title,SIGNED) ASC;

2 个答案:

答案 0 :(得分:2)

在任何想要扩展的数据库中,每行函数都是一个坏主意。这是因为他们必须每次> {em>>执行每行行的计算。{/ 1>}。

智能DBA执行此操作的方法是创建包含计算排序键的全新列,并使用插入/更新触发器来确保正确设置。这意味着只在需要时才执行计算,并在所有选择中分摊其成本。

这是少数可以从第三范式恢复的情况之一,因为使用触发器可以防止数据不一致。几乎没有人抱怨他们的数据库占用了磁盘空间,绝大多数问题都与速度有关。

并且,通过使用此方法并索引新列,您的查询绝对会尖叫。

基本上,您创建另一个名为select的列,其映射如下:

natural_title

确保触发器中使用的映射函数允许允许的最大值。然后使用如下查询:

title          natural_title
-----          -------------
title 1        title 00001
title 2        title 00002
title 10       title 00010
title 1024     title 01024

答案 1 :(得分:0)

如果#总是在最后那样你可以做一些字符串操作来使它工作:

SELECT *, CAST(RIGHT(p.post_title,2) AS UNSIGNED) AS TITLE_INDEX 
FROM wp_posts p
ORDER BY TITLE_INDEX asc

假设您可能有100多个或1000多个数字,可能需要稍微调整一下。