2017-07-12 13 views
1

Visitには、このように書かれたextraの列が含まれています。user:xxx login:yyy(文字列型)。アクティブレコードルビーと区別する

の異なるパスワードの後に(loginの後に)すべての番号を決定したいと思います。私は自分のコントローラにこのActiveRecordクエリを書きました。

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

このクエリは私に言葉loginないパスワード(この例ではyyy)が含まれている個別のextraの結果が得られます。私は同じことをしたいが、単語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 'に変更する必要があります。 ')。ご協力いただきありがとうございます! – media

+1

@media - ありがとう!ユーザーがそこにいることを忘れてしまった。私は 'login'だけを考えました。 – 31piy

関連する問題