我的页面上有一个jQuery自动完成小部件,它在我的数据库中填充了一个带有客户端名称的搜索栏。但是,它并没有像我预期的那样发挥作用。
这是我用来从数据库中获取名称的SQL:
SELECT First, Last, Middle
FROM Clients
WHERE First + ' ' + Last like ?
然后我将搜索词绑定到参数。
我遇到的问题是,当填充搜索栏时,我得到的结果很不错。例如,如果我输入'Shirley',我会看到像Deborah Smith(假设)这样的名字。所以,我认为问题在于我的查询,但我真的不知道如何调整它以找到我想要的结果(在这种情况下,所有Shirleys)。
有人可以帮忙吗?
答案 0 :(得分:0)
你能试试吗?
SELECT First, Last, Middle
FROM Clients
WHERE concat(First,' ',Last) like concat('%', ?, '%')
最重要的区别是我在搜索字词之前和之后传递%,以便在名字和姓氏中的任何位置搜索该字词。另外,我使用concat将字符串组合在一起。
我没有MySQL可以在这里访问我,我无法测试它,但这应该工作。我同样用它来自动完成。
答案 1 :(得分:0)
一种可能性是,您要为每个输入的字符向DB发送请求,并且正在接收最终匹配的一个或一些字符的结果。
您是否可以添加调试代码,以便告知哪个请求导致数据库返回哪些数据?
如果我正在调试它,我想回到我身边:
然后我会更新我的代码,这样除了提供数据之外,我还会收到上面的内容。然后,您可以手动点击您创建的自动完成网址/服务,并仔细检查您是否收到了手动查询所需的数据。
如果这看起来不错,那么我会在我的页面上添加一个位置,以显示我调用自动完成服务的次数,以及一个显示自动完成服务所说的数据的地点。
希望这有帮助,祝你好运!
答案 2 :(得分:0)
我注意到您正在阅读First, Last, Middle
,但where子句仅使用First,Last
。
可能是这样的情况:显示的字符串来自Middle
,而where子句根据First,Last
值进行过滤。