0

次を含むmysqlデータベースのSQLクエリがあります

where("UPPER(CONCAT(firstName, ' ', lastName)) LIKE ?", params[:query])

sqlite3 には concat 関数がありませんが、代わりにパイプ || を使用するため、上記を次のように記述してみました。

where("UPPER(firstName || ' ' || lastName) LIKE ?", params[:query])

しかし、クエリは結果を返していません。||を正しく使用していませんか?

小文字の where は Rails クエリ ヘルパーであることに注意してください。

アップデート

concat 演算子が問題ではないことが判明したため、タイトルをこの質問に変更しました。名前であいまい検索を実行しようとしています。つまり、人の名前に検索語を含むすべてのレコードを返します。たとえば、「a」を検索すると、「tanja」は肯定的な一致になります。サーバーはこのクエリを my sql で実行しています。

これは実行中のSQLです(検索ボックスに「a」が入力された場合)

SELECT id, firstname, lastname, title FROM "employees" WHERE (upper(firstName ||' '||lastName) LIKE 'a')

ajaxリクエスト(コンソールに表示される)はこれです

findByName: a employee.js:20
XHR finished loading: "http://localhost:3000/employees/search/a". jquery.js:8215
[] ##empty array returned

Railsコンソールでクエリを実行すると、空も返されるので、SQLに問題がある可能性があります

>> Employee.select("id, firstname, lastname, title").where("upper(firstName ||' '||lastName) LIKE ?", "a")
  Employee Load (0.2ms)  SELECT id, firstname, lastname, title FROM "employees" WHERE (upper(firstName ||' '||lastName) LIKE 'a')
=> []

ただし、データベースには、文字「a」を含む名前のレコードがあります。たとえば、これはデータベース レコードです。上記のようなクエリ (人物の名前に検索された文字が含まれていると仮定して) がこのようなレコードで機能しない理由を誰か説明できますか?

[#<Employee id: 1, firstname: "Steven", lastname: "Wells", managerid: 4, title: "Software Architech", department: "Engineering", officephone: "604-999-8989", cellphone: "345-678-0987", email: "sweels@email.com", city: "Vancouer", picture: "assets/steven_wells.jpg", twitterid: "@fartbreath", blogurl: "http://blahblah.com", created_at: "2013-01-16 01:24:38", updated_at: "2013-01-16 01:24:38">,

誰が問題が何であるかを説明できますか?

4

1 に答える 1

0

よくわかりませんが、「a」にワイルドカードが必要ですか? 例 - "%a%"?

于 2013-01-17T00:36:48.677 に答える