LIKE语句在查询中找不到所有内容

时间:2013-02-11 15:37:52

标签: mysql sql

我的声明如下:

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}')

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

示例:

enter image description here

有什么想法吗?

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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”是“驱动器”的前两个字符,所以你应该没有问题。但是,“rd”不是“道路”的前两个字符,你显然会遇到问题。您可能会考虑更换或更好地尝试某种类型的全文搜索。