我正在尝试为我的网站创建一个搜索查询类型的东西,我知道我可以使用简单的'%string%'来获得具有类似结果的东西,但这意味着你必须输入确切的顺序你试图找到的文章/字符串的单词。
例如,如果您输入“One Three Two”,您只能在字符串中的任何位置找到具有“One Three Two”顺序的文章...并且它无法搜索如下所示的内容:“One Two三个“等等。
所以我想到了一个解决方案,但我还没想过如何实际解决这个问题......这是我的思考过程:
就是这样!所以我只是想知道这是否甚至可以使用PHP实现?或者我必须回到Perl或其他什么地方?
答案 0 :(得分:0)
当然可以。 MySQL中的真实表达式是1
,因此只需将它们加在一起并按顺序排列。
mysql> select ('ABC' LIKE '%B%') + ('ABC' LIKE '%C%');
+-----------------------------------------+
| ('ABC' LIKE '%B%') + ('ABC' LIKE '%C%') |
+-----------------------------------------+
| 2 |
+-----------------------------------------+
1 row in set (0.02 sec)
只需在OR
子句中使用WHERE
即可获得匹配的文章。
SELECT ...
WHERE 'ABC' LIKE '%B%' OR 'ABC' LIKE '%C%'
答案 1 :(得分:0)
您可能还想考虑全文搜索。设置起来要困难得多,但可以让你的搜索看起来更像搜索引擎。对于找到具有相关关键字的额外结果非常有价值。此外,它应该在内部处理短语的爆炸(所有三个单词在一起),你只需传递用户提供的内容:
答案 2 :(得分:0)
创建查询,使其成为各种搜索的联合,遵循您的想法,以获得最佳匹配:
3个单词的例子
select 1 as levl, text from table where text like '%w1%' or text like '%w2%' or text like '%w3%'
union
select 2 as levl, text from table where text like '%w1%' or text like '%w2%'
union
select 2 as levl, text from table where text like '%w2%' or text like '%w3%'
union
select 2 as levl, text from table where text like '%w1%' or text like '%w3%'
union
select 3 as levl, text from table where text like '%w1%'
union
select 3 as levl, text from table where text like '%w2%'
union
select 3 as levl, text from table where text like '%w3%'
order by levl
请注意,也会检索单词的某些部分。如果你只需要整个单词,在php中解析结果中的每一行以消除不正确的单词。 Sql将是主选择器,你可以进行炼油厂。