很抱歉,如果这是重复的问题,但我找不到任何有用的东西在这里。
所以,我尝试做的是,按照title
字段中查询字符串的位置对mySQL语句的结果进行排序。我试着用WAR函数来做这件事,这有点起作用(即使第一个结果是错误的,因为它有一个元音变音-也许你也有一个解释=加分)。我的语句看起来像这样(在这种情况下,查询字符串是'all'):
SELECT title, translation, INSTR(title, 'all') as posititon
FROM `dictionary`
WHERE title LIKE '%all%'
ORDER BY posititon
结果如下所示:
到目前为止,一切顺利。但我也希望有结果匹配的字段中的查询字符串“查询”。所以当我在WHERE子句中添加OR translation LIKE '%all%'
时,我得到了一个完全不同的结果:
SELECT title, translation, INSTR(title, 'all') as posititon
FROM `dictionary`
WHERE (title LIKE '%all%' OR translation LIKE '%all%')
ORDER BY posititon
测试结果:
因此,我的目标是根据查询字符串在字段“title”中的位置对结果PRIMARY进行排序,并根据查询字符串在字段“addition”中的位置对结果SECONDARY进行排序。
你能帮我吗?
2条答案
按热度按时间6yt4nkrj1#
我认为regexp_like可能有助于获得职位:
产出:
| 标题|regexp1|
| --|--|
| 牛| 0 |
| 所有| 1 |
| 米斯凯尔| 6 |
注意:当然,你需要用所有可能的值来扩展正则表达式(
[aä]
),比如á
,à
等。zour9fqk2#
这并不涉及Luuk的回答中提到的口音敏感性问题。
因为当指针没有找到时,REGEXP_REREXP_REGEXP_REREREREXP_REGEXP_REXP_REREREXP_REXP_
这里有一个方法:
-ti_pos DESC
与ti_pos ASC
相同,但NULL移到了末尾。输出:
| 标题|翻译|ti_pos| tr_pos|
| --|--|--|--|
| 所有|alle,aufgerbraucht -| 1 | 1 |
| 球|东西| 2 ||
| 小|东西| 3 ||
| 东西|所有|| 1 |
| 东西|球|| 2 |
| Toa| Tor(Fußball)|| 10 |
| 米斯凯尔|米斯凯尔|||
或者是意图更明显的东西: