Sql Rails的双重匹配来自has_和_属于_多个

Sql Rails的双重匹配来自has_和_属于_多个,sql,ruby-on-rails,has-and-belongs-to-many,Sql,Ruby On Rails,Has And Belongs To Many,假设我有一个has_和_属于_的关系,我有帖子和类别。很容易找到一个类别中的所有帖子,或者某个帖子所属的所有类别。但是,如果我想找到属于多个类别的帖子列表,该怎么办?例如,关于Rails中安全性主题的帖子列表,我可能需要属于安全性和Rails类别的帖子 是否可以通过ActiveRecord中内置的finder方法来实现这一点,或者我需要使用SQL?有人能解释一下如何使用include或join吗?您可以使用include或join,例如: 或 我还建议检查railscast以了解联接和包含之间的

假设我有一个has_和_属于_的关系,我有帖子和类别。很容易找到一个类别中的所有帖子,或者某个帖子所属的所有类别。但是,如果我想找到属于多个类别的帖子列表,该怎么办?例如,关于Rails中安全性主题的帖子列表,我可能需要属于安全性和Rails类别的帖子

是否可以通过ActiveRecord中内置的finder方法来实现这一点,或者我需要使用SQL?有人能解释一下如何使用include或join吗?

您可以使用include或join,例如:

我还建议检查railscast以了解联接和包含之间的区别,这样您就可以决定在您的情况下什么更好

您可以使用包含或联接,如:


我还建议检查railscast以了解联接和包含之间的区别,这样您就可以决定在您的情况下什么更好

我对rails一无所知,但我正在尝试用一些sql做类似的事情。这可能对我们两人都有用,也可能不有用

我有一个文章表和一个应用类别的查找表。为了得到一篇包含“security”类别和“rails”类别的文章,我将文章表加入到类别表中,当然,还将再次重新加入。category表的每个联接都在表别名ie language或topic中使用提示 伪代码:

SELECT article.*,
category_language.category_id,
category_topic.category_id

FROM category category_language
INNER JOIN article ON category_language.articleID = article.articleID 
INNER JOIN category category_topic ON article.articleID = category_topic.articleID 

WHERE category_language.category_id in (420) /* rails */
and category_topic.category_id in (421) /* security */

这还没有完全解决,我希望如果我在这里表现出我的无知,有人会说出来。

我对rails一无所知,但我正在尝试用一些sql做类似的事情。这可能对我们两人都有用,也可能不有用

我有一个文章表和一个应用类别的查找表。为了得到一篇包含“security”类别和“rails”类别的文章,我将文章表加入到类别表中,当然,还将再次重新加入。category表的每个联接都在表别名ie language或topic中使用提示 伪代码:

SELECT article.*,
category_language.category_id,
category_topic.category_id

FROM category category_language
INNER JOIN article ON category_language.articleID = article.articleID 
INNER JOIN category category_topic ON article.articleID = category_topic.articleID 

WHERE category_language.category_id in (420) /* rails */
and category_topic.category_id in (421) /* security */

这还没有完全解决,我希望如果我在这里表现出我的无知,有人会说出来。

这应该可以帮助你:这可能会重复:嗯,我想同时询问多个类别,所以只有属于类别Security和Rails的帖子。但是,当我使用上面的例子,替换AND或or时,我没有得到结果。categories.name上的name只是一个例子。您需要用正确的列名替换它。请检查日志文件以查看此ruby查询生成的SQL。您还可以对其进行部分测试,例如:@result=Category.wherename='Security'和name='Rails',因此您可以确保它只返回与条件匹配的类别。还要确保数据库中有这些类别,否则它不会返回任何内容。是的,我已经检查了所有这些。Category.wherename='Security'和name='Rails'将只返回名称同时为Security和Rails的类别,这毫无意义。所有帖子都可以有多个类别,我需要一种方法来查找两个独立类别(安全性和Rails)中的所有帖子。像这样的帖子和分类已经在我的数据库中了。我的意思是同时询问多个类别,所以只有属于安全和Rails类别的帖子。但是,当我使用上面的例子,替换AND或or时,我没有得到结果。categories.name上的name只是一个例子。您需要用正确的列名替换它。请检查日志文件以查看此ruby查询生成的SQL。您还可以对其进行部分测试,例如:@result=Category.wherename='Security'和name='Rails',因此您可以确保它只返回与条件匹配的类别。还要确保数据库中有这些类别,否则它不会返回任何内容。是的,我已经检查了所有这些。Category.wherename='Security'和name='Rails'将只返回名称同时为Security和Rails的类别,这毫无意义。所有帖子都可以有多个类别,我需要一种方法来查找两个独立类别(安全性和Rails)中的所有帖子。像这样的帖子和类别已经在我的数据库中了。
SELECT article.*,
category_language.category_id,
category_topic.category_id

FROM category category_language
INNER JOIN article ON category_language.articleID = article.articleID 
INNER JOIN category category_topic ON article.articleID = category_topic.articleID 

WHERE category_language.category_id in (420) /* rails */
and category_topic.category_id in (421) /* security */