ORDER BY表示错误(MySQL)

时间:2012-07-10 20:04:45

标签: mysql

所以我的问题如下:我从MySQL数据库中获取了一个项目列表,之后我想用Javascript对它进行排序(它可以动态编辑)。主要问题是数字和字符。假设这是数据库中的列表:

3, a, 2, 1, b

声明将返回:

a, b, 1, 2, 3

但我希望它是:

1, 2, 3, a, b

我的数据库是utf8_unicode_ci,但这没有帮助。它仍然会产生错误的结果。 (我不能只检查它们是否是数字,然后将它们排序到顶部,因为项目也可以命名为“2some56thing”,并且必须在“asome56thing”之前。)

4 个答案:

答案 0 :(得分:0)

这个链接可能会有所帮助,我想: http://matthewturland.com/2008/11/05/natural-ordering-in-mysql/

试试这个:

ORDER BY CONCAT(`name`, `login`)+0, CONCAT(`name`, `login`)

答案 1 :(得分:0)

你在mysql中有什么语言环境设置?

我的排序得到了这个输出:

SELECT * FROM sorting ORDER BY a;
+------+
| a    |
+------+
| 1    |
| 2    |
| 3    |
| a    |
| b    |
+------+

答案 2 :(得分:0)

sort(function(a, b) {
    // Stuff to get the text out of the DOM
    return textb > texta;
}

如果texta大于textb,您需要从custom compare function返回-1(或任何数字< 0),否则排序将不起作用(也许根本不排序)。更好:

    return textb>=texta ? textb>texta ? 1 : 0 : -1;

    return textb>texta - texta>textb;

    return texta.localeCompare(textb);

答案 3 :(得分:0)

不要只使用>运算符。

由于您正在实施自己的排序功能,因此您可以随心所欲地复杂化。

首先,检测textatextb是否属于同一类型,如果没有,则指示数字位于字符串之前(使用1或-1,具体取决于哪个变量是数字变量)。

如果它们属于同一类型,则可以使用>,但这并不合适;比较运算符应返回一个数值,而不是布尔值。

因此:

 (a == b) ? 0 : ( (a < b) ? -1 : 1 )