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

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 1、20 和相应的 userId、3、10 的 onyl 评论。

任何帮助或建议将不胜感激!

最佳答案

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

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
        )
;

关于php - 带有 IN 子句和多个条件的 MYSQL Select 语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9945479/

10-16 21:47