如何匹配字符串与撇号?
我有一个带撇号的字符串。例如Mark's House
。在我的网址中,它的名字叫做www.mydomain.com/Marks-House/
。如何匹配字符串与撇号?
我想通过提供的名称获取数据库条目,在本例中为Marks-House
。所以MySQL不知道在k
和s
(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路由自动添加为-
空间和撇号删除该条目匹配字符?
您可以使用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
谢谢!我有一个问题。你宁愿建议添加一个新的列与完全匹配的名称,以避免使用像'LIKE','MATCH'等(或在这种情况下'替换')功能,并更有效或不是这个重要? – AlexioVay
@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
您还可以将格式化的名称作为单独的列保存在数据库记录中吗? –
我想是的。这会更有效地推荐,然后尝试将其与此答案的建议解决方案相匹配吗? – AlexioVay
我不知道效率。我只想匹配给出各种拼写的正确域名?可以存储各种格式化别名的域名。这意味着一些预处理来识别和存储域名和变体。或者您处理存储的原始文本。像往常一样,这是一个折中的空间,时间和成本。 –