我将Sphinx搜索(http://sphinxsearch.com/)与y
结合使用,需要按字符串属性排序:
我将该属性配置为SphinxQL
。
示例查询:sql_attr_string = myattribute
;
我按SELECT * FROM myindex ORDER BY myattribute ASC
订购的订单:
myattribute ASC
我想要的订单:
1a, 100b, 101c, 2a, 3a
有没有办法实现这个目标?
答案 0 :(得分:0)
您可以做的是添加另一个包含字符串属性长度的属性,然后先按长度ASC排序,再按字符串ASC排序。这会修复您在问题中提供的示例中的顺序:
mysql> select * from idx_min order by l asc, myattribute asc;
+------+-------------+------+
| id | myattribute | l |
+------+-------------+------+
| 1 | 1a | 2 |
| 4 | 2a | 2 |
| 5 | 3a | 2 |
| 2 | 100b | 3 |
| 3 | 101c | 3 |
| 6 | a200 | 3 |
| 7 | c345 | 3 |
| 8 | a345-2 | 5 |
+------+-------------+------+
8 rows in set (0.00 sec)
但是你可能希望在1a之前有a200,c345,a345-2(来自你的评论)。然后我想在Sphinx / Manticoresearch中你能做到的唯一方法是使用UDF(用户定义的函数)。您需要创建一个函数,该函数将字符串转换为数字,因为a-z的值应大于0-9。然后,您可以在查询中使用该函数的结果。像这样:
select *, natsort(myattribute) ns from idx_min order by ns asc;