如何编写mysql查询来搜索数据库?

Dav*_*ave 5 mysql search

我拥有一个壁纸网站,我正在尝试编写一个搜索功能,该功能将在数据库中搜索用户正在搜索的术语。我在数据库中有 2 个字段,我正在针对 TAGS 和 NAME 进行搜索

我目前的做法是将搜索词分成多个词,然后使用这些词搜索数据库。因此,如果用户搜索“纽约”,我的查询将如下所示

SELECT * FROM wallpapers 
WHERE tags LIKE '%New%' OR name LIKE '%new%' 
or tags LIKE '%York%' OR name LIKE '%York%'
Run Code Online (Sandbox Code Playgroud)

当然,问题在于任何带有新术语的东西都会被拉起,比如“新车”等。如果我用下面的代码替换上面的查询,那么它太模糊了,只会显示 2 张壁纸

SELECT * FROM wallpapers 
WHERE tags LIKE '%New York%' OR name LIKE '%New York%'
Run Code Online (Sandbox Code Playgroud)

有没有人有更好的方法来编写搜索查询?

Nev*_*uyt 7

看来您要介绍相关性的概念。

尝试:

select * from (
SELECT 1 as relevance, * FROM wallpapers 
WHERE tags LIKE '%New York%' OR name LIKE '%New York%'
union
select 10 as relevance, * FROM wallpapers 
WHERE (tags LIKE '%New%' OR name LIKE '%new%') 
and (tags LIKE '%York%' OR name LIKE '%York%')
union
select 100 as relevance, * FROM wallpapers 
WHERE tags LIKE '%New%' OR name LIKE '%new%' 
union
select 100 as relevance, * FROM wallpapers 
WHERE tags LIKE '%York%' OR name LIKE '%York%'
)
order by relevance asc
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果您的数据库变得太大,这将非常非常糟糕 - 您希望始终格式化您的列,以便它们全部为大写(或全部小写),并且您希望避免在 where 子句中使用通配符如果可以的话。

一旦这成为一个问题,请查看全文搜索。