SQL搜索查询匹配至少一半的数组关键字

时间:2014-03-12 22:11:19

标签: php sql sql-server database search

我有一个表架构。

Id, Name, Email, Description.

描述列每行都有很多文本。现在我想根据用户输入的单词在该列中执行搜索。假设用户输入了五个单词进行搜索。

  1. 自然
  2. 现在我想执行搜索,如果任何描述列的行与上述五个中的至少三个中的任何一个匹配,它应该在结果集中给出该行。我不希望所有单词匹配或单个匹配。我希望在Description列的每一行中至少匹配三个单词。我知道LIKE声明但是我怎样才能做到这一点我能得到我想要的结果。忽略区分大小写。我怎样才能做到这一点?任何人都可以帮我为我的问题进行SQL查询吗?

2 个答案:

答案 0 :(得分:1)

我确定应该有很多更好的解决方案,但我发现这个问题很有趣,这是一个提案

SELECT IF ( LENGTH(CONCAT(
    IF (Description LIKE '%busy%', '1', ''), 
    IF (Description LIKE '%good%', '1', ''), 
    IF (Description LIKE '%nature%', '1', ''), 
    IF (Description LIKE '%blck%', '1', ''), 
    IF (Description LIKE '%sweet%', '1', '')        
)) > 2, 'Matches', 'Does not match') FROM ....

XDD我根本没想过效率

答案 1 :(得分:1)

Olvathar的想法是正确的,但它只显示匹配或不匹配的结果。但是,如果要获取针对此控件的记录,则应在where子句中使用if语句,以仅显示条件为true的记录。

SELECT *  FROM TABLENAME WHERE Description IS NOT NULL AND IF ( LENGTH(CONCAT(
IF (Description LIKE '%busy%', '1', ''), 
IF (Description LIKE '%good%', '1', ''), 
IF (Description LIKE '%nature%', '1', ''), 
IF (Description LIKE '%blck%', '1', ''),
IF (Description LIKE '%sweet%', '1', '')
)) > 2, 1, 0)=1

希望这会有所帮助。