Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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
Sql 针对多个地址字段的匹配失败,我可以';我没办法_Sql_Full Text Search_Street Address - Fatal编程技术网

Sql 针对多个地址字段的匹配失败,我可以';我没办法

Sql 针对多个地址字段的匹配失败,我可以';我没办法,sql,full-text-search,street-address,Sql,Full Text Search,Street Address,我的表格结构如下: address_number address_street address_town address_county address_postcode 网站上有一个搜索框,人们可以在其中输入部分地址,我需要根据他们提交的信息确定如何返回准确的结果,但有一些复杂的地方邮政编码是这样存储的:BN2 1HN和地址\u编号可以小到只有一个字符 我曾尝试将地址字段合并在一起,并将其与输入进行比较,但没有一个有效,我还尝试使用类似于循环的遍历表中的每个字段,但这一点都不令人满意。

我的表格结构如下:

address_number  address_street  address_town  address_county  address_postcode
网站上有一个搜索框,人们可以在其中输入部分地址,我需要根据他们提交的信息确定如何返回准确的结果,但有一些复杂的地方邮政编码是这样存储的:BN2 1HN和
地址\u编号
可以小到只有一个字符

我曾尝试将地址字段合并在一起,并将其与输入进行比较,但没有一个有效,我还尝试使用类似于循环的
遍历表中的每个字段,但这一点都不令人满意。理想情况下,我希望首先返回最准确的结果,但我很感激这只能通过
匹配
来实现


如果您有PayPal捐赠按钮,任何帮助都将不胜感激,最终答案将为您提供一杯饮料(如果礼节允许的话?)。这是我的第一个问题,因为我很固执,通常喜欢自己解决这个问题。

一提到

MATCH(col1,col2) ... AGAINST(expr)
但这里有一种使用LIKE的方法,它可能对SQL Server有所帮助:

/*
CREATE TABLE tab1 (address_number VARCHAR(10),  address_street VARCHAR(50), 
address_town VARCHAR(50),  address_county VARCHAR(50),  address_postcode VARCHAR(50))
INSERT INTO tab1 VALUES ('100','Queen Street','Winchester','Hartford','XYZ 123')
INSERT INTO tab1 VALUES ('10','Downing Street','London','','XYZ 124')
--*/
SELECT * FROM Tab1
WHERE (address_number+' '+address_street+' '+address_town+' '+address_county
+' '+address_postcode + ' '+replace(address_postcode,' ','')/*remove blank*/
) LIKE '%100 QUEEN%'

要想像谷歌一样,你需要对用户输入的内容进行多种多样的尝试,并根据地址是否以用户输入的内容开头、是否按字面意思包含等进行排序。

由于提到

MATCH(col1,col2) ... AGAINST(expr)
但这里有一种使用LIKE的方法,它可能对SQL Server有所帮助:

/*
CREATE TABLE tab1 (address_number VARCHAR(10),  address_street VARCHAR(50), 
address_town VARCHAR(50),  address_county VARCHAR(50),  address_postcode VARCHAR(50))
INSERT INTO tab1 VALUES ('100','Queen Street','Winchester','Hartford','XYZ 123')
INSERT INTO tab1 VALUES ('10','Downing Street','London','','XYZ 124')
--*/
SELECT * FROM Tab1
WHERE (address_number+' '+address_street+' '+address_town+' '+address_county
+' '+address_postcode + ' '+replace(address_postcode,' ','')/*remove blank*/
) LIKE '%100 QUEEN%'

要想像谷歌一样,你需要尝试用户输入的内容的多种变体,并根据地址是否以用户输入的内容开头、是否按字面意思包含等进行排序。

考虑添加你正在使用的RDBMS,必要时包括版本。此外,如果你也有一些工作查询,它也是一个开始。考虑添加你使用的RDBMS,必要时包括版本。此外,如果您有一些工作查询也发布了它,这是一个起点。