我想这样搜索:用户输入例如“murrays”,搜索结果将显示包含“murray”的记录和包含“murray”的记录。我应该在query.pl中做什么?
答案 0 :(得分:5)
您如何看待使用SOUNDEX
函数和SOUNDS LIKE
运算符?
这样,您可以简单地执行:
SELECT * from USERS WHERE name SOUNDS LIKE 'murrays'
我很确定它并不适用于所有情况,也许它不是解决问题的最有效方法,但它可以满足您的需求。
答案 1 :(得分:3)
如果您绝对需要在SQL中执行这些查询,这将无济于事,但如果您可以为其设置Lucene搜索索引,则可以获得大量此类“模糊搜索”功能。请注意,Lucene本身就是一个非常复杂的主题。
答案 2 :(得分:3)
你可以做的是在数据库中创建一个额外的字段,其中包含从中删除所有特殊字符的数据,并在那里搜索。有点蹩脚,我知道。期待看到更明智的答案;)
答案 3 :(得分:3)
又快又脏:
SELECT * FROM myTable WHERE REPLACE(name, '\'', '') = 'murrays'
答案 4 :(得分:2)
我首先会构建一个搜索列,其中包含没有标点符号的文本,然后搜索该列。否则,您必须有一系列正则表达式来搜索或检查PHP中的单个记录以进行匹配:这两个记录都是计算密集型操作。
答案 5 :(得分:1)
也许是这样的:(未经测试!)
SELECT * FROM users WHERE REPLACE(user_name, '\'', '') = "murrays"
答案 6 :(得分:0)
如果这是单字搜索,您可以尝试使用Soundex或Metaphone功能吗?这些将处理声音和拼写
不确定MySQL是否有这些,但PHP确实如此(这需要单独的列来保存这些值)。
否则,Richy的无标点额外列似乎最好。
答案 7 :(得分:0)
您可以尝试为此查询添加替换
replace(name, '''','')
暂时摆脱比赛的撇号。
select name from nametable where name = replace(name,'''','');
答案 8 :(得分:0)
这个查询应该能够选择“murray”或“murray's”。
var inputStr = "murrays";
inputStr = String.Replace("'", "\'", inputStr);
SELECT * FROM ATable WHERE Replace(AField, '\'', '') = inputStr OR AField = inputStr
答案 9 :(得分:0)
murrays
或murray
marrays
。这是可选的,但您的用户会喜欢这样。