狮身人面像 - 本地(人类)的字符串

时间:2018-01-23 10:55:13

标签: sql-order-by sphinx sphinxql

我将Sphinx搜索(http://sphinxsearch.com/)与y结合使用,需要按字符串属性排序:

我将该属性配置为SphinxQL

示例查询:sql_attr_string = myattribute;

我按SELECT * FROM myindex ORDER BY myattribute ASC订购的订单: myattribute ASC

我想要的订单: 1a, 100b, 101c, 2a, 3a

有没有办法实现这个目标?

1 个答案:

答案 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;