具有IN子句和多个条件的MYSQL Select语句

时间:2012-03-30 14:59:44

标签: php mysql sql database pdo

这里可能有一个简单的解决方案,但它似乎让我绊倒了。我正在尝试根据两列中的值数组查询表。这是相关的表结构和样本数据

comment table
id, userId, articleId .... etc etc

article table
id, userId .... etc etc

Data:  UserIds = 3, 10.   ArticleIds = 1, 2

假设我正在尝试查找特定文章ID的所有评论:1,2

我可以轻松使用此查询

select * from comments WHERE articleId IN(1,2)

然而,这里变得复杂。我有一个在评论查询之前执行的查询,用于确定相应的文章ID。这些ID在一个数组中。在数组中还有每篇文章的相应用户ID。

我现在要做的是查询注释表中仅查看数组中的文章(1,2)并仅查询原作者(3,10)的注释。

上面的简单查询将返回articleId 1和20的所有注释。例如,我无法弄清楚在哪里添加另一个条件,其中说明了对于articleId,20和相应的userId,3,10的ony​​l注释。

非常感谢任何帮助或建议!

5 个答案:

答案 0 :(得分:1)

你试过吗

select * from comments WHERE articleId IN(1,2) and authorId in (3,10)

如果没有,请更新您的问题原因。

答案 1 :(得分:1)

我认为最简单的方法是写:

SELECT comments.*
  FROM articles
  JOIN comments
    ON articles.id = comments.articleId
   AND articles.userId = comments.userId
 WHERE articles.id IN (1, 2)
;

AND articles.userId = comments.userId条款强制执行您的“仅针对原作者的评论”要求。

或者,您可以使用EXISTS子句:

SELECT *
  FROM comments
 WHERE articleId IN (1, 2)
   AND EXISTS
        ( SELECT 1
            FROM articles
           WHERE id = comments.articleId
             AND userId = comments.userId
        )
;

或单行子查询:

SELECT *
  FROM comments
 WHERE articleId IN (1, 2)
   AND userId =
        ( SELECT userId
            FROM articles
           WHERE id = comments.articleId
        )
;

答案 2 :(得分:0)

您可以根据需要添加任意数量的IN语句:

select * from comments WHERE articleId IN(1,2) AND userId IN (3,10)

答案 3 :(得分:0)

你不能只是在你声明的查询中创建首先运行子查询的查询:

SELECT * FROM `comments` WHERE `articleId` IN(1,2) AND `userId` IN (__subquery__)

答案 4 :(得分:0)

- 您可以使用子查询

select * from comments WHERE articleId IN(1,2)
and userId in ( select userId from article where id in (1,2) )