0

我有一个自动完成功能,适用于您在输入字段中输入的任何字母组合。但是现在我希望它忽略我正在搜索的结果中的破折号。

我在输入框中输入

ea1

它会发现

ea-1

自动完成代码

$("#customer"+myIndex).autocomplete({
         source: "AS_userLookup.cfm",
         select: function(e, ui){

我的数据库查询

 SELECT roomname        
 From sec_rooms_new
 where lower(roomname) like '%#lcase(url.term)#%' and dontshow = 0

我会在 jquery 中执行还是在 db 查询中执行?

4

1 回答 1

5

将您的查询修改为:

SELECT
    roomname        
FROM
    sec_rooms_new
WHERE
    REPLACE(LOWER(roomname), '-', '') LIKE '%#lcase(url.term)#%'
    AND dontshow = 0

REPLACE 函数将任何出现的 替换-为空字符串。这意味着ea-1成为ea1并因此在您搜索时返回ea1

使用此查询可能会很慢,因为每次执行它时,数据库都会对所有行的值应用REPLACEandLOWER函数。roomname最好创建一个额外的列来存储准备好的值roomname(因此已经应用了REPLACEandLOWER函数)。然后你可以在这个列上搜索,这样会快很多。

还有一件事:根据您的设置(列类型和字符集)LIKE可能已经不区分大小写。这意味着您可以LOWER从语句中删除该函数WHERE,这将使查询更快。在MySQL 文档中阅读有关它的更多信息。

于 2012-05-07T13:11:36.033 回答