0

データベース内のクライアント名を検索バーに表示するjQueryオートコンプリートウィジェットがページにあります。ただし、期待どおりに動作していません。

データベースから名前をフェッチするために使用しているSQLは次のとおりです。

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

次に、検索語をパラメーターにバインドします。

私が抱えている問題は、検索バーにデータが入力されたときに得られる結果がかなりずれていることです。たとえば、「Shirley」と入力すると、Deborah Smith(架空)のような名前が表示されます。したがって、問題はクエリにあると思いますが、必要な結果(この場合はすべてのShirleys)を見つけるためにそれを微調整する方法がわかりません。

誰か助けてもらえますか?

4

3 に答える 3

0

1つの可能性は、入力されたすべての文字についてDBに要求を送信し、最終的に一致する1つまたはいくつかの文字の結果を受信して​​いることです。

どのリクエストがDBからどのデータを返したかを判断できるように、デバッグコードを追加できますか?

私がそれをデバッグしていたなら、私は私に戻ってきたいと思います:

  1. リクエストパラメータ'シャーリー'
  2. データに基づいて何らかの方法で変更している場合のSQLクエリ(あなたのようには見えません、yay params!)
  3. すべてのデータ

次に、コードを更新して、データを返すだけでなく、上記も受け取るようにします。次に、作成したオートコンプリートURL /サービスを手動でヒットし、手動クエリに期待するデータが返されることを再確認できます。

これが良さそうな場合は、オートコンプリートサービスを呼び出した回数を示すスポットと、オートコンプリートサービスが呼び出したと言っているデータを示すスポットをページに追加します。

これがお役に立てば幸いです。

于 2012-07-03T18:25:27.970 に答える
0

あなたが読んでいることに気づき First, Last, Middleましたが、where句は。のみを使用していますFirst,Last

表示される文字列はから派生したものでMiddleあるのに対し、where句は値に基づいてフィルタリングする場合がありFirst,Lastます。

于 2012-07-03T18:36:18.637 に答える
0

これを試すことができますか?

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

最も重要な違いは、検索用語の前後に % を渡して、姓と名の範囲内の任意の場所で用語を検索できるようにすることです。さらに、concat を使用して文字列を結合しています。

ここでアクセスするMySQLがなく、テストできませんでしたが、これは機能するはずです。同様にオートコンプリートにも使用します。

于 2012-07-03T14:12:26.157 に答える