如何匹配字符串与撇号?

问题描述:

我有一个带撇号的字符串。例如Mark's House。在我的网址中,它的名字叫做www.mydomain.com/Marks-House/如何匹配字符串与撇号?

我想通过提供的名称获取数据库条目,在本例中为Marks-House。所以MySQL不知道在ks(Mar k's)之间有一个撇号。

在我的数据库中,条目被保存为带有撇号的Mark's House

我的查询:

SELECT 
id, title_de AS title, de AS wiki 
FROM pages 
WHERE MATCH (title_de) 
against ('+ Marks-House' in Boolean mode) 
OR title_de LIKE '%Marks-House' LIMIT 1 

是否有可能忽略像数据库撇号,因为我的URI路由自动添加为-空间和撇号删除该条目匹配字符?

+1

您还可以将格式化的名称作为单独的列保存在数据库记录中吗? –

+0

我想是的。这会更有效地推荐,然后尝试将其与此答案的建议解决方案相匹配吗? – AlexioVay

+0

我不知道效率。我只想匹配给出各种拼写的正确域名?可以存储各种格式化别名的域名。这意味着一些预处理来识别和存储域名和变体。或者您处理存储的原始文本。像往常一样,这是一个折中的空间,时间和成本。 –

您可以使用REPLACE()删除'当你在做你的WHERE。例如;

mysql> select replace("Mark's house", "'", "") as new_value; 
+-------------+ 
| new_value | 
+-------------+ 
| Marks house | 
+-------------+ 
1 row in set 

这将使您的查询以下;

SELECT 
id, title_de AS title, de AS wiki 
FROM pages 
WHERE replace(title_de, "'", "") = "Marks-House" LIMIT 1 
+0

谢谢!我有一个问题。你宁愿建议添加一个新的列与完全匹配的名称,以避免使用像'LIKE','MATCH'等(或在这种情况下'替换')功能,并更有效或不是这个重要? – AlexioVay

+1

@Vay是的,那很好,那么你可以索引该领域,你的搜索查询将更加优化和更快。 –

一种方法可以基于双象

SELECT 
id, title_de AS title, de AS wiki 
FROM pages 
WHERE MATCH (title_de) 
against ('+ Marks-House' in Boolean mode) 
OR title_de LIKE '%Marks%' and title_de like '%House%' LIMIT 1 

或多个%

SELECT 
id, title_de AS title, de AS wiki 
FROM pages 
WHERE MATCH (title_de) 
against ('+ Marks-House' in Boolean mode) 
OR title_de LIKE '%Marks%House' LIMIT 1 

或者也可以是正则表达式

SELECT 
id, title_de AS title, de AS wiki 
FROM pages 
WHERE MATCH (title_de) 
against ('+ Marks-House' in Boolean mode) 
OR title_de REGEXP 'Marks.+House' LIMIT 1 
+0

谢谢您的解决方案建议!在你的最后一个例子中,这是否意味着我总是必须用'。+'替换字符串中的'-'?另外,你是否会建议添加一个具有完全匹配名称的新列,以避免使用像LIKE,MATCH等函数,并且效率更高或不重要? – AlexioVay

+0

@Vay不..你不需要替换' - '...这个点是一个正则表达式的特殊字符,并且意味着每个字符..所以正则表达式为Marsk每个字符和房子工作......希望很明确.. – scaisEdge