我有一个查询,它给了我一个基于搜索词的结果。
我正在使用来自邮政的 POSIX 搜索 (~*(: https://www.postgresql.org/docs/8.3/functions-matching.html#FUNCTIONS-POSIX-REGEXP
例如,如果我搜索">ed">
结果将是这样的:
{
"success": true,
"data": [
{
"name": "Victoria",
"last_name": "Ojeda Acu–a",
},
{
"name": "Eduardo Daniel",
"last_name": "Ordo–ez",
},
{
"name": "Ludmila Daiana",
"last_name": "Paredes Sosa",
}
]
}
- 因此,第一个结果在 last_name 中存在:ojeda
- 第二个结果以Ed的名字存在:Ed uardo
- 第三个结果在 last_name 中存在:Paedes
这是我的(简化(查询:
SELECT u.name, u.last_name FROM user u WHERE u.name ~* :searchTerm OR u.last_name ~* :searchTerm
我认为Eduardo 是我搜索的最准确的结果,因为我按"ED">的顺序搜索(一开始也可能是 ED 的一些last_name(,所以我想让 Eduardo 作为我的第一个结果有什么办法可以实现这一点吗?
我知道我可以使用 LIKE %:searchTerm,但我想搜索整个字符串,但以某种预定义的顺序获取结果。
谢谢!
添加一个ORDER BY
子句:
ORDER BY starts_with(u.name, :searchTerm) DESC
这依赖于FALSE < TRUE
.