2017-07-12 63 views
1

該表Visit包含以這種方式寫入的列extrauser:xxx login:yyy(字符串類型)。用activerecord ruby​​計數明顯

我想確定不同密碼的所有數字(在login之後)。我在我的控制器中寫了這個ActiveRecord查詢。

Visit.select(:extra).where('extra LIKE ?', "%login%").distinct.count 

該查詢會給我不同的extra其中包含單詞login不是密碼(yyy在這個例子中)的結果。我想對login之後的所有字符串(密碼)進行相同處理。

有沒有解決方案來做到這一點?任何幫助將不勝感激。

回答

2

您可以使用MySQL的SUBSTRING_INDEX來實現此目的。

Visit.select("SUBSTRING_INDEX(extra, ':', -1)").where('extra LIKE ?', "%login%").distinct.count 
+0

謝謝,但它給了我一個錯誤的結果。例如,如果'user:xxx login:yyy'和'user:xxx login:zzz',即使密碼不同,結果也將始終爲1而不是2! – media

+0

這是想法,但你必須在'SUBSTRING_INDEX(extra,':',1)'中用'-1'來更改'1'以得到正確的答案(只提取密碼,因爲1給出了用戶')。謝謝你的幫助! – media

+1

@media - 謝謝!滑出用戶也在那裏。我只考慮過'登錄'。 – 31piy