RoR,Ruby 如何从数据库中拆分数据并使用计数

Posted

技术标签:

【中文标题】RoR,Ruby 如何从数据库中拆分数据并使用计数【英文标题】:RoR,Ruby How to split data from database and use count with it 【发布时间】:2017-05-02 15:26:43 【问题描述】:

我正在尝试从数据库中提取数据并将其与饼图一起使用。

我能够从数据库中的“浏览器”列中提取数据,该列是一个字符串,格式如下:“Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0”

当我在查询中使用“count”方法时,数据将保存为这样的哈希:

"Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"=>5, "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:51.0) Gecko/20100101 Firefox/51.0"=>9

例如,我只想显示浏览器或操作系统的版本。有没有任何方法(拆分或子字符串)有这样的哈希?当然,“计数”方法应该有效

"Firefox/45.0"=>5, "Firefox/51.0"=>9

我尝试使用拆分,但使用方法计数时,将找不到数据,因为它作为一个完整字符串保存在数据库中“Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/ 45.0"。数据库中我的表中的列浏览器中没有“Firefox/45.0”。

当我从控制台使用简单查询时,我也尝试在 mysql 查询中使用子字符串,我得到了我想要的结果,但是由于我使用的是 Ruby on Rails 和 ActiveRecords,所以“子字符串”没有返回相同的结果(不能正常工作)

有什么帮助吗?

【问题讨论】:

请显示您用于生成查询的代码。 【参考方案1】:

执行以下操作:

input = "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"=>5, "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:51.0) Gecko/20100101 Firefox/51.0"=>9
result = 
input.each  |k, v| result[k.split.last] = v 

用您的实际查询替换输入。

它的作用是:

迭代输入的每个元素 对于每一个,使用键为k,值为v, 取k,split它(把字符串剪成空格分隔的单词),最后一个单词用last 在结果中添加一个新条目,其中键是所选的最后一个单词,值为 v

【讨论】:

谢谢@yoones,它帮助了我,但请你解释一下 |k, v| result[k.split.last] = v 到底做了什么,以便我可以做更多的事情:) @media 我添加了一些解释,检查一下。 @yoones 注意:我知道我可以使用split(' ')[3] 而不是 last 例如,但这只会返回 'Linux' 而不是 'Linux x86_64 对吗?有什么想法吗? @media 试试这个:"toto titi tata plouf".split[1..2].join(' ') 我认为这个答案是正确的,但它可能更干净。您不需要创建一个空哈希然后将其填充;而只是做input.transform_keys |browser| browser.split.last

以上是关于RoR,Ruby 如何从数据库中拆分数据并使用计数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ROR (Ruby) 中显示 PDF? [关闭]

你可能不知道的RoR 5点技巧

RoR TagLib-Ruby:如何在 DB 中设置 ID3 标签

Android - Ruby on Rails - MySQL

拆分数据框字符串列并计数项目。 (dplyr 和 R)

如何使用 ROR 处理数据库?