Php 棘手的查询:获取一列的计数,另一列有2个条件

Php 棘手的查询:获取一列的计数,另一列有2个条件,php,mysql,Php,Mysql,我正在努力回答一个富有挑战性的问题 我有两张表格:帖子、答案 posts具有ID、PID和名称 答案具有ID、PID、已批准 ID是用户ID,PID是post ID 我想做的是列出所有的post name posts.name以及有多少唯一的people id回复了他们的帖子。诀窍是,我只想统计那些已批准的回复。已批准='Y'并且我不想统计创建帖子的人,所以post.ID!=答案是 因此,结果应该显示如下内容: Name People with Approved Replies Na

我正在努力回答一个富有挑战性的问题

我有两张表格:帖子、答案

posts具有ID、PID和名称 答案具有ID、PID、已批准

ID是用户ID,PID是post ID

我想做的是列出所有的post name posts.name以及有多少唯一的people id回复了他们的帖子。诀窍是,我只想统计那些已批准的回复。已批准='Y'并且我不想统计创建帖子的人,所以post.ID!=答案是

因此,结果应该显示如下内容:

Name       People with Approved Replies
Name 1                               10
Name 2                                7
我目前的代码乱七八糟,方法错误。它只给出了一个结果,而回复的数量太少/太高。但以下是我目前的情况:

$results = $dbh->prepare("select COUNT(DISTINCT answers.ID) AS reply,
 posts.ID,    
 posts.PID,
 posts.name,
 answers.PID,
 answers.approved
FROM answers
LEFT JOIN posts ON answers.PID=posts.PID
WHERE (answers.approved = 'Y') LIMIT 10
GROUP BY answer.ID");

$results->execute();
$row = $results->fetchAll(PDO::FETCH_ASSOC);

我认为这个查询应该满足您的要求

SELECT 
    p.name,
    p.id,
    p.pid,
    (SELECT COUNT(DISTINCT id) 
     FROM answers 
     WHERE  answers.pid = p.pid 
     AND    answers.approved = 'Y' 
     AND    answers.id != p.id) as reply
FROM posts p

这将选择帖子名称、id、用户id和不同批准答案的计数

您没有group by子句,因此您得到的是全局计数,而不是每个帖子的计数。另外,请注意,没有ORDER by的限制是毫无意义的。谢谢。在这个查询中,我将如何分组?我添加了组,但仍然得到相同的确切数字,这仍然是一个太大的数字。如果你愿意,考虑下面这个简单的两步过程:1。如果您还没有这样做,请提供适当的DDL和/或SQLFIDLE,以便我们可以更轻松地复制问题。2.如果尚未这样做,请提供与步骤1中提供的信息相对应的所需结果集。看起来很接近,但没有得到任何结果。选择COUNTDISTINCT id这行似乎有点不对劲…我已经更新了我的查询,你真的不需要加入答案,count distinct id-完全可以,如果id-是答案中的用户id,这是您想要计算的,但我不需要加入两个表,以便获得总批准答案的帖子名称吗?您已经从帖子表中进行了选择,您可以直接获得帖子。nameGot ya。嗯,还是没有结果。我将继续修补这种方法。我在您的选择中添加了w.PID和w.approved,但仍然没有添加任何内容。如果你还看到什么,请告诉我。谢谢