我有一个像这样的语句:
AND ( CONCAT( arc_property_res.STREET_NUM, ' ', arc_property_res.STREET_NAME ) LIKE '%{$address}%'
NUM
和NAME
在不同的列中。目前,如果我有一个输入字段并输入: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}')
在某些情况下,我输入的地址不会最先出现。请注意那里有正确的列表,只是不是第一个。
例子:
有什么想法吗?
最佳答案
好吧,很难说出您在 STREET_NUM 和 STREET_NAME 中到底有什么,但如果它适用于 000
和 Street Dr
让我们假设这就是我们的值(value)观。
现在我们知道
'000' + ' ' + 'Street Dr' LIKE '%000 Street Dr%'
有效。
为什么它适用于:
'000' + ' ' + 'Street Dr' LIKE '%000 Street Drive%'
?我认为不应该。
这就是 LIKE
运算符的工作原理。
要解决此问题,您需要在数据库中使用街道、车道、封闭区等的全名,而不是 Dr., St., Cl。
关于mysql - LIKE 语句未在查询中找到全部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14815434/