-1

我有包含空格的值的数据库。例如“拉斯维加斯”。在我的 mysql 中,我正在使用 match 进行搜索。

select * where match(city) against ("LASVEGAS") 

它没有返回任何行,因为它在没有空格的数据库中搜索。谁能帮我做搜索,包括空格。

4

2 回答 2

1

您可以使用replace删除查询中的空格

select * from cityTable where replace(city," ","")="LASVEGAS"

您可以在此处阅读有关该replace功能的更多信息!

编辑:匹配是必需的

由于 match 是必需的,并且由于您不能在 match 内部使用 replace ,因此我在这里建议采用中间方法。(我真正的建议是不要在像城市列这样简单的列上使用fulltext-index,match但有时您的要求会迫使您做出奇怪的解决方案)against

通过在普通城市列旁边创建一个“搜索友好”城市列(具有fulltext索引支持),您可以在其中删除所有空格和破折号,您可以尝试解决这个问题。

|     City      |  CitySearch  |
|===============|==============|
|   Las Vegas   |   LasVegas   |
| San Francisco | SanFrancisco |
| Saint-Quentin | SaintQuentin |

当您稍后进行搜索时,您可以使用matchagainstCitySearch列上进行搜索。当用户键入要搜索的城市名称时,您首先必须以与清除City列相同的方式清除它。现在,用户写“Las Vegas”、“Las-Vegas”还是“LasVegas”都没有关系,因为在清除用户数据后,您最终会使用“LasVegas”来搜索CitySearch列。

sql查询将是:

select * from cityTable where match(CitySearch) against ("LasVegas")

我希望这将在您的要求范围内

于 2013-08-27T16:18:48.210 回答
0

假设您从外部应用程序中提取搜索词,我认为您可以很容易地转换为正则表达式检查。

SELECT *
FROM table t
WHERE t.city REGEX 'L\s?A\s?S\s?V\s?E\s?G\s?A\s?S';

这将从您的表中提取任何版本的 LASVEGAS,包括插入的空格。这里每个 \s? 表示一个可选的空格。我不是 REGEX 专家,但这里是 mysql 文档链接。 http://dev.mysql.com/doc/refman/5.1/en/regexp.html

于 2013-08-27T18:37:07.580 回答