2010-08-29 79 views
0

我將如何把這些MySQL的查詢與sqlite3的?:翻譯鋼軌查詢源碼

self.find(:first, :conditions => ['concat(first_name, \' \', middle_names, \' \', last_name) = ?', name]) 

self.find(:all, :conditions => ['(concat(first_name, \' \', last_name) LIKE ?) OR (concat(first_name, \' \', middle_names, \' \', last_name) LIKE ?)', "%#{name}%", "%#{name}%"]) 
+0

你可能會考慮非規範化此表,以便保持全名一個單獨的*索引*字段,或者創建一個視圖,以避免必須反覆進行連接操作。 (FWIW,爲數據庫分裂名字是有問題的,畢竟,有許多人爲他們的'first_name'是他們的'family_name',只是這個領域中衆多問題之一。) – 2010-08-29 16:19:17

+0

嗨,謝天謝地我正在編寫這個名單來處理名和姓,所以他們會解決這個問題!我所有的數據都來自csv導入。 – thomasfedb 2010-08-29 22:44:47

回答

0

一點谷歌搜索可以幫助:http://www.google.com/search?q=sqlite+concat

SQLite中的毗連運算符是||。而對於字符串與單引號'更容易閱讀我會附上這些字符串用雙引號",這樣你就不需要那麼多的轉義:

self.find(:first, :conditions => ["first_name || ' ' || middle_names || ' ' || last_name = ?", name]) 

self.find(:all, :conditions => ["(first_name || ' ' || last_name LIKE ?) OR (first_name, ' ', middle_names || ' ' || last_name LIKE ?)", "%#{name}%", "%#{name}%"]) 
+0

謝謝!看起來像sqlite在這種情況下堅持標準的SQL ... – thomasfedb 2010-08-29 22:43:03

0

工作||是SQLite連接運算符。因此,這可能會工作:

self.find(:first, :conditions => ['first_name || \' \' || middle_names || \' \' || last_name = ?', name]) 
self.find(:all, :conditions => ['(first_name || \' \' || last_name LIKE ?) OR (first_name || \' \' || middle_names || \' \' || last_name LIKE ?)', "%#{name}%", "%#{name}%"])