Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 搜索字符串的最佳查询是什么?它出现在一个表的多个列中?_Database_Search_Query Optimization - Fatal编程技术网

Database 搜索字符串的最佳查询是什么?它出现在一个表的多个列中?

Database 搜索字符串的最佳查询是什么?它出现在一个表的多个列中?,database,search,query-optimization,Database,Search,Query Optimization,好的,比如说,我得到了一个有3列的表:c1,c2,c3 C1-C2-C3 A2-B2-N2 K1-B2-N1 K1-B3-N1 L1-A2-C1 好的,当用户搜索A1、A2、A3、B1、B2的任意组合时。。。然后,系统可以选择与壁橱匹配的行(这意味着只要单词出现在一列中,系统就会选择它,在更多列中出现的单词越多,它就越匹配),并根据最接近的匹配对它们进行排序 Ex1:用户搜索“K1 A2 C1 N1”,系统将显示: K1-B2-N1 K1-B3-N1 A2-B2-N2 L1-A2-C1 Ex2:

好的,比如说,我得到了一个有3列的表:c1,c2,c3


C1-C2-C3
A2-B2-N2
K1-B2-N1
K1-B3-N1
L1-A2-C1

好的,当用户搜索A1、A2、A3、B1、B2的任意组合时。。。然后,系统可以选择与壁橱匹配的行(这意味着只要单词出现在一列中,系统就会选择它,在更多列中出现的单词越多,它就越匹配),并根据最接近的匹配对它们进行排序

Ex1:用户搜索“K1 A2 C1 N1”,系统将显示:
K1-B2-N1
K1-B3-N1
A2-B2-N2
L1-A2-C1

Ex2:用户搜索“K1 A2 C1 N2 B2”,系统将显示:
A2-B2-N2
L1-A2-C1
K1-B2-N1
K1-B3-N1

我的解决方案是将搜索字符串拆分为单独的单词&然后根据表中的列搜索每个单词。但我不确定它是否是最佳查询,因为数据库必须在许多循环中搜索

那么,如果你是数据库专家,那么在这种情况下最好的查询是什么

select c1
  ,c2
  ,c3
  ,case when c1 in ('K1','A2','C1','N1') then 1 else 0 end
  +case when c2 in ('K1','A2','C1','N1') then 1 else 0 end
  +case when c3 in ('K1','A2','C1','N1') then 1 else 0 end as sortweight
from theTable
where c1 in ('K1','A2','C1','N1')
or c2 in ('K1','A2','C1','N1')
or c3 in ('K1','A2','C1','N1')  order by sortweight desc
     ,c1
     ,c2
     ,c3
其他论坛的人提出了上述问题