0

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

3, a, 2, 1, b

该语句将返回:

a, b, 1, 2, 3

但我希望它是:

1, 2, 3, a, b

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

4

4 回答 4

0

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

试试这个:

ORDER BY CONCAT(`name`, `login`)+0, CONCAT(`name`, `login`)
于 2012-07-10T20:13:13.180 回答
0

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

我的排序得到这个输出:

SELECT * FROM sorting ORDER BY a;
+------+
| a    |
+------+
| 1    |
| 2    |
| 3    |
| a    |
| b    |
+------+
于 2012-07-10T20:13:25.997 回答
0
sort(function(a, b) {
    // Stuff to get the text out of the DOM
    return textb > texta;
}

如果大于,则需要从自定义比较函数返回 -1 (或任何数字 < 0),否则排序将不起作用(并且可能根本无法排序)。更好的:textatextb

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

或者

    return textb>texta - texta>textb;

或者

    return texta.localeCompare(textb);
于 2012-07-10T20:14:05.293 回答
0

不要只使用>运算符。

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

首先,检测textatextb是否属于同一类型,如果不是,则表明 numeric 在 string 之前(使用 1 或 -1,取决于哪个变量是 numeric 的)。

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

因此:

 (a == b) ? 0 : ( (a < b) ? -1 : 1 )
于 2012-07-10T20:15:53.590 回答