多字段匹配情况下怎么优先查询某个字段

2019-07-26 19:18:08 +08:00
 U2FsdGVkX1

有个表有 title 和 context 字段,搜索的时候使用这个 SQL 匹配

SELECT * FROM post WHERE title LIKE "%google%" OR context LIKE "%google%" LIMIT 10

现在希望先匹配 title 字段,然后再匹配 context 字段……也就是结果 title 匹配在前,context 匹配在后

如果 title 足够 10 个的话就不用再匹配 context 了

搜了搜几乎没啥帮助(也有可能我不知道要怎么描述这个情况……),于是只能来问问了(

4033 次点击
所在节点    MySQL
1 条回复
ywcjxf1515
2019-07-26 20:22:57 +08:00
一个未优化的思路:
select * from(

select *,1 as status from (
select * from (SELECT * FROM post WHERE title like '%Linux%' limit 10) as a
except
select * from (SELECT * FROM post WHERE context like '%算法%' limit 10) as b)
as c

union

select *,2 as status from (
select * from (SELECT * FROM post WHERE context like '%算法%' limit 10) as d
union
select * from (SELECT * FROM post WHERE title like '%Linux%' limit 10) as e)
as f

union

select *,3 as status from (
select * from (SELECT * FROM post WHERE context like '%算法%' limit 10) as g
except
select * from (SELECT * FROM post WHERE title like '%Linux%' limit 10) as i
) as j

)as s
order by status limit 10;

如果你使用 mysql 8.0,会容易很多。我觉得还是读两次数据库在内存中计算吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/586542

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX