2017-03-06 4 views
1

このような単純なクエリ。なぜ構文エラーですか?

MyModel.where('student_id = :id AND from <= :date AND to >= :date', {:id => student.id, :date => day.to_s(:db)}) 

例外

=> ActiveRecord::JDBCError: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from <= '2017-02-28 00:00:00.000' AND to >= '2017-02-28 00:00:00.000')' 

を返し、私は、なぜ得ることはありません。 (あなたが予約語に基づいて、列名を使用しない場合は、より良い)を使用すると、列名fromを持っているときにbackticsを使用する必要があり、予約語であるから、

+3

'FROM'は、MySQLの予約語であります@ラプターの撮影。 – Raptor

+0

これは私が考えていたものです。しかし、私のテーブルにはフィールドがあります。私はどうしたらいいですか? – Viktor

+0

シンプル:名前を変更します。カラム名とテーブル名に予約語を使用しないでください。 – Raptor

答えて

4

MyModel.where('student_id = :id 
        AND `from` <= :date 
        AND `to` >= :date', {:id => student.id, :date => day.to_s(:db)}) 
+1

私は、同じ問題が何百回もここで(SO)解決されているので、この質問に答えている点はありません。あなたのようなユーザー(経験豊富なMySQLのバッジを持っている人)は、これらの質問を重複として閉じるべきです。 –

関連する問題