mysql多列搜索

5 php mysql

我有这样一张桌子:

+-------------------+---------------+
| 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,它将采用任意数量的搜索词并返回最简洁的结果集.我可以想到一些非常丑陋的方法来做这件事,但是他们打乱了我的业力.

pax*_*blo 0

理想情况下,我认为您应该有两个单独的搜索词,一个用于描述 (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 有点生疏,所以我不知道你到底该怎么做,但这个概念是合理的。