我有一个表架构。
Id, Name, Email, Description.
描述列每行都有很多文本。现在我想根据用户输入的单词在该列中执行搜索。假设用户输入了五个单词进行搜索。
现在我想执行搜索,如果任何描述列的行与上述五个中的至少三个中的任何一个匹配,它应该在结果集中给出该行。我不希望所有单词匹配或单个匹配。我希望在Description列的每一行中至少匹配三个单词。我知道LIKE声明但是我怎样才能做到这一点我能得到我想要的结果。忽略区分大小写。我怎样才能做到这一点?任何人都可以帮我为我的问题进行SQL查询吗?
答案 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
希望这会有所帮助。