我想按如下方式查询表:
我有一个名为“category”的字段,我的输入匹配包含N个单独的单词。我希望查询匹配包含所有N个单词的所有行,但是按任何顺序排列。
例如,如果字段类别包含“hello good morning world”,我的输入查询可以包含“hello morning”或“good”或“world hello”,并且所有内容都与查询匹配。
如何制定这样的SQL表达式?
如果查询可以不区分大小写,那也很好。
答案 0 :(得分:2)
如果您使用的是MySQL,可以使用boolean fulltext search feature来实现此目的。您可以在每个术语的前面添加一个+,然后只返回包含所有术语的结果(按任何顺序)。您需要确保包含类别字段的列具有指定的全文索引才能使其生效。其他数据库引擎可能具有类似的功能因此,例如,假设在类别列上有全文索引,您可能会执行以下操作...
SELECT * FROM myTable WHERE MATCH (category) AGAINST ('+term1 +term2 +term3' IN BOOLEAN MODE);
我会避免使用“LIKE”运算符,因为其他人建议你不得不担心混合大写/小写的头痛问题,如果你有一个大型数据库在LIKE搜索词的前面使用%导致全表扫描而不是使用对性能而言可怕的索引。
答案 1 :(得分:0)
我没有编写将为您构建此查询的循环。这将完成工作,但效率很低。
SELECT * FROM table
WHERE (
TOUPPER(category) LIKE '*HELLO*' AND
TOUPPER(category) LIKE '*GOOD*' AND
TOUPPER(category) LIKE '*MORNING*' AND
TOUPPER(category) LIKE '*WORLD*'
);
您还可以使用带有SQL的REGEX进行研究。