2009-08-21 46 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說,關於「讀」,並請考慮我剛纔說你列,如果這是一個新的應用程序,你必須在什麼數據庫架構看起來像控制。