为jQuery自动完成调整SQL

时间:2012-07-03 13:31:54

标签: jquery mysql sql

我的页面上有一个jQuery自动完成小部件,它在我的数据库中填充了一个带有客户端名称的搜索栏。但是,它并没有像我预期的那样发挥作用。

这是我用来从数据库中获取名称的SQL:

SELECT First, Last, Middle 
FROM Clients
WHERE First + ' ' + Last like ?

然后我将搜索词绑定到参数。

我遇到的问题是,当填充搜索栏时,我得到的结果很不错。例如,如果我输入'Shirley',我会看到像Deborah Smith(假设)这样的名字。所以,我认为问题在于我的查询,但我真的不知道如何调整它以找到我想要的结果(在这种情况下,所有Shirleys)。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

你能试试吗?

SELECT First, Last, Middle 
FROM Clients
WHERE concat(First,' ',Last) like concat('%', ?, '%')

最重要的区别是我在搜索字词之前和之后传递%,以便在名字和姓氏中的任何位置搜索该字词。另外,我使用concat将字符串组合在一起。

我没有MySQL可以在这里访问我,我无法测试它,但这应该工作。我同样用它来自动完成。

答案 1 :(得分:0)

一种可能性是,您要为每个输入的字符向DB发送请求,并且正在接收最终匹配的一个或一些字符的结果。

您是否可以添加调试代码,以便告知哪个请求导致数据库返回哪些数据?

如果我正在调试它,我想回到我身边:

  1. 请求参数'Shirley'
  2. SQL查询,如果我根据数据以任何方式更改它(看起来不像你,是的,是的!)
  3. 所有数据
  4. 然后我会更新我的代码,这样除了提供数据之外,我还会收到上面的内容。然后,您可以手动点击您创建的自动完成网址/服务,并仔细检查您是否收到了手动查询所需的数据。

    如果这看起来不错,那么我会在我的页面上添加一个位置,以显示我调用自动完成服务的次数,以及一个显示自动完成服务所说的数据的地点。

    希望这有帮助,祝你好运!

答案 2 :(得分:0)

我注意到您正在阅读First, Last, Middle,但where子句仅使用First,Last

可能是这样的情况:显示的字符串来自Middle,而where子句根据First,Last值进行过滤。