我有这样一张桌子:
+-------------------+---------------+ | description | colour | +-------------------+---------------+ | Macrame Dress | Washed Black | | Darcelle Gilet | Dirty Shellac | | Darcelle Cardigan | Washed Black | | Let It Rot Vest | Optic White | | Let It Rot Crew | Washed Black | | Let It Rot Crew | Optic White | | Battalion Short | Somme | | Seine Dress | Washed Black | | Seine Dress | Cocomotion | | Odette V-neck | Linen Marl | +-------------------+---------------+我想搜索它为"黑色连衣裙",它只返回第1行和第8行.如果我输入"黑色",它将返回第1,3,5和8行.连衣裙应该返回第1,8和9行.
任何人都可以想到一个非常优雅,漂亮的sql,它将采用任意数量的搜索词并返回最简洁的结果集.我可以想到一些非常丑陋的方法来做这件事,但是他们打乱了我的业力.
理想情况下,我认为您应该有两个单独的搜索词,一个用于描述 (s1),一个用于颜色 (s2)。
那么你的查询就变成:
select * from tbl where description like '%(s1)%' and colour like '%(s2)%'
Run Code Online (Sandbox Code Playgroud)
当然,替换 s1 和 s2 的值。
空白 s2 会导致 %% 应该匹配所有内容(我认为)。
为了能够在任一字段中搜索多个术语,您需要类似的东西
select * from tbl
where description + colour like '%(s1)%'
and description + colour like '%(s2)%'
and description + colour like '%(s3)%'
Run Code Online (Sandbox Code Playgroud)
这必须根据搜索模式中的单词数量动态构建(因此“black dress”将有 s1 和 s2,black 只会有 s1)。“描述+颜色”位是连接字段;我的 SQL 有点生疏,所以我不知道你到底该怎么做,但这个概念是合理的。