0

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

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

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

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

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

有人可以帮忙吗?

4

3 回答 3

0

你能试试这个吗?

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

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

我在这里没有可以访问的 MySQL,我无法对其进行测试,但这应该可以。我同样将它用于自动完成。

于 2012-07-03T14:12:26.157 回答
0

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

您可以添加调试代码,以便您可以判断哪个请求导致从数据库返回什么数据?

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

  1. 请求参数'Shirley'
  2. SQL 查询,如果我根据数据以任何方式更改它(看起来不像你,是的,参数!)
  3. 所有数据

然后我会更新我的代码,以便除了返回数据之外,我还会收到上述内容。然后,您可以手动点击您创建的自动完成 url/服务,并仔细检查您是否收到了您期望手动查询的数据。

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

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

于 2012-07-03T18:25:27.970 回答
0

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

可能是显示的字符串派生自Middlewhere 子句基于First,Last值进行过滤的情况。

于 2012-07-03T18:36:18.637 回答