所以我的问题如下:我从MySQL数据库中获取了一个项目列表,之后我想用Javascript对它进行排序(它可以动态编辑)。主要问题是数字和字符。假设这是数据库中的列表:
3, a, 2, 1, b
声明将返回:
a, b, 1, 2, 3
但我希望它是:
1, 2, 3, a, b
我的数据库是utf8_unicode_ci
,但这没有帮助。它仍然会产生错误的结果。 (我不能只检查它们是否是数字,然后将它们排序到顶部,因为项目也可以命名为“2some56thing”,并且必须在“asome56thing”之前。)
答案 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)
不要只使用>
运算符。
由于您正在实施自己的排序功能,因此您可以随心所欲地复杂化。
首先,检测texta
和textb
是否属于同一类型,如果没有,则指示数字位于字符串之前(使用1或-1,具体取决于哪个变量是数字变量)。
如果它们属于同一类型,则可以使用>
,但这并不合适;比较运算符应返回一个数值,而不是布尔值。
因此:
(a == b) ? 0 : ( (a < b) ? -1 : 1 )