Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用数组创建MySQL查询?_Mysql_Ruby_Arrays - Fatal编程技术网

如何使用数组创建MySQL查询?

如何使用数组创建MySQL查询?,mysql,ruby,arrays,Mysql,Ruby,Arrays,我需要获取一个数组并将其用于MySQL查询 我试图寻找方法,但它们似乎都与PHP数组相关,而不是Ruby 例如,我有两个术语=[“遗传学”、“老年人”、“健康”,我想使用: con.query "SELECT col1 FROM data1 WHERE MATCH (col2) AGAINST (terms)" 这可能吗?您只需在您的反对条款中加入您的条款: 请注意,使用match/country几乎肯定比使用一系列类似子句更具执行力。有关详细信息,请参阅此StackOverflow答案: 查

我需要获取一个数组并将其用于MySQL查询

我试图寻找方法,但它们似乎都与PHP数组相关,而不是Ruby

例如,我有两个术语=[“遗传学”、“老年人”、“健康”,我想使用:

con.query "SELECT col1 FROM data1 WHERE MATCH (col2) AGAINST (terms)"
这可能吗?

您只需在您的反对条款中加入您的条款:

请注意,使用match/country几乎肯定比使用一系列类似子句更具执行力。有关详细信息,请参阅此StackOverflow答案:


查看MySQL文档,了解有关全文搜索的更多信息,包括可能的运算符:。

我强烈建议查看ORM,例如,它可以非常轻松地以独立于DBM的方式生成适当的查询

它允许我们方便地使用数组和散列。下面使用数组在SQL中生成where子句:

my_posts = posts.where(:category => ['ruby', 'postgres', 'linux'])
# WHERE category IN ('ruby', 'postgres', 'linux')
该特定示例是筛选记录部分的一部分

OP在评论中说:

col2是文本,每行有一个段落,而不仅仅是一个单词

然后您需要一个LIKE或regex子句来允许测试每个单词。有关Sequel如何允许您在字符串内搜索,请参阅数据集筛选部分

代码类似于:

data1.select(:col1).where(Sequel.like(:col2, terms.map{ |t| "%#{ t }%" } ))
SELECT col1 FROM data1 WHERE ((col2 LIKE '%genetics%') OR (col2 LIKE '%elderly%') OR (col2 LIKE '%health%'))
这将产生如下结果:

data1.select(:col1).where(Sequel.like(:col2, terms.map{ |t| "%#{ t }%" } ))
SELECT col1 FROM data1 WHERE ((col2 LIKE '%genetics%') OR (col2 LIKE '%elderly%') OR (col2 LIKE '%health%'))

我需要更多的信息。举一些例子。例如,我有terms=['genetics','elder','health'],我想使用con.query从data1中选择col1,其中col2与terms匹配是可能的吗?你有什么,我看不到。抱歉,意外地过早按下了enter键!我不明白你的问题。是mysql相关还是ruby数组相关?谢谢你的建议!我确实试过了,但没有结果。如果有帮助的话,col2是文本,每行有一个段落,而不仅仅是一个单词。我不确定这是否就是为什么这么麻烦,我能够得到一些结果,但只能从中得到:terms=['genetics']\u terms=terms.map{x |'+x+}.join','rs=con.query从data1中选择col1,如您所见,将col2与{u terms}匹配,我只能在数组有一个元素时得到一个结果…如果需要更改答案,则无需使用标记。堆栈溢出保留您编辑的历史记录,以便我们能够在需要时查看更改。这正是我所需要的。非常感谢你!看看@howluocanyougo对我的答案的评论,这表明他/她想做一个完整的索引搜索,而不是where/in查询。我最初的答案,你删除了,说的和你上面用AR而不是Sequel说的差不多。你最初的答案仍然存在。您可以通过单击已编辑的链接回滚到它。在这一点上,我建议将原始答案与更新后的答案合并,以显示两者,并引用OP的评论,以澄清添加新内容的原因。感谢您的建议!kardeiz在我所寻找的东西上是正确的,但我肯定会研究续集!