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