2009-08-21 44 views
0

我不知道为什么SQL不喜欢我的查询:SQL Rails中 - 链接“和”

@unreadmessages = Message.find(:all, :conditions => ["receiver_id = ? AND receiver_archived = ? AND read = ?", self.current_user, "No", "No"]) 

还有就是写一个不同的方式,但我想保持我的风格是一致的(此一个避免SQL注入,我收集。)。

感谢您的输入!

+0

嗨Smirhage, Mysql ::错误:您的SQL语法错误;检查与您的MySQL服务器版本对应的手册,在第1行附近使用正确的语法以使用'read ='No')':SELECT * FROM'messages' WHERE(receiver_id = 28 AND receiver_archived ='No'AND read ='没有') 我已经找到了解决这个问题的办法(在这个地方),但我想知道是什么原因导致了错误。 – 2009-08-21 21:30:41

+0

感谢您的回答 - 我不知道阅读部分或抽搐。我将使用布尔值并更改列名称。 顺便说一句: unreadmessages = Message.find(:所有,:条件=> {:receiver_id => self.current_user,:receiver_archived => “否”,:读=> “否”}) 看起来工作。 周末愉快。 – 2009-08-21 21:51:00

回答

4

“Read”是MySQL中的reserved word。我建议重命名该列。或者,您可以在每次引用时将其放入备份中。

@unreadmessages = Message.find(:all, :conditions => ["receiver_id = ? AND receiver_archived = ? AND `read` = ?", self.current_user, "No", "No"]) 

我推荐重新命名。

+0

好的。我完全错过了那个细节。 – jdl 2009-08-21 21:45:39

+0

或者不要为字段名称使用保留字 – txwikinger 2009-08-22 01:35:43

1

我打算假设你不是真的在数据库中存储单词“否”来跟踪真/假。如果你使用布尔值或位,请试试这个。

@unreadmessages = Message.find(:all, :conditions => ["receiver_id = ? AND receiver_archived = ? AND read = ?", self.current_user.id, false, false]) 

编辑: 看什么ryanb说,关于“读”,并请考虑我刚才说你列,如果这是一个新的应用程序,你必须在什么数据库架构看起来像控制。