次を含む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">,
誰が問題が何であるかを説明できますか?