1

我有一个类似的声明,如下所示:

AND ( CONCAT( arc_property_res.STREET_NUM, ' ', arc_property_res.STREET_NAME ) LIKE '%{$address}%'

NUMNAME在不同的列中。目前,如果我有一个输入字段并输入,则此查询有效:000 Street Dr但是一旦我尝试这样做:000 Street Drive我得到 0 个结果。同样的事情也发生在 Rd、Blvd、Pk 和其他一些地方。

我试过只使用一个通配符%,但仍然没有找到东西。任何帮助或想法表示赞赏。


更新

我将表格转换为使用 MyISAM,以便可以使用全文搜索。所以现在所有匹配的查询都有效,即:Dr、Drive、Rd、Road 等......

我的查询现在看起来像这样:

AND ( MATCH(arc_property_res.STREET_NUM, arc_property_res.STREET_NAME) AGAINST('{$address}')

在某些情况下,我输入的地址不会首先出现。注意正确的列表在那里,它不是第一个。

例子:

在此处输入图像描述

有什么想法吗?

4

2 回答 2

2

好的,很难说出你在 STREET_NUM 和 STREET_NAME 中究竟有什么,但如果它适用000Street Dr让我们假设这是我们的价值观。

现在我们知道了

'000' + ' ' + 'Street Dr' LIKE '%000 Street Dr%'工作。

为什么它适用于:

'000' + ' ' + 'Street Dr' LIKE '%000 Street Drive%'? 我认为不应该。

这就是LIKE运营商的工作方式。

要解决此问题,您需要在数据库中包含街道、车道、关闭点等的全名,而不是 Dr.、St.、Cl。

于 2013-02-11T15:49:31.427 回答
1

您可以尝试以下方法:

AND CONCAT( arc_property_res.STREET_NUM, ' ', arc_property_res.STREET_NAME ) LIKE '%{$address}%'
OR '{$address}' LIKE CONCAT( '%', arc_property_res.STREET_NUM, ' ', arc_property_res.STREET_NAME, '%' )

由于“dr”是“drive”的前两个字符,因此您应该没有问题。但是,“rd”不是“road”的前两个字符,你显然会在那里遇到问题。您可能会考虑提出替换或更好的方法,尝试某种类型的全文搜索。

于 2013-02-11T15:54:02.500 回答