请参阅小提琴:SQL查询语句select statemenet
http://sqlfiddle.com/#!2/de208/1
到目前为止,我有,我想工作正常,但现在我发现一个问题情况下,下面的SQL语句。
SELECT Count(id) FROM data WHERE user = 2 AND seen = 0
AND date > (SELECT coalesce(MAX(date),0) FROM data WHERE user = 2 AND seen <> 0);
A部分) 在上面摆弄这个效果很好,它产生计数2 - 最看不见的职位。 问题是最近一次看不见的帖子在被看到之前已被删除,所以它也会被忽略。所以下一次有数据时,这个查询被执行,它将被再次计数。应该只计算一次。
部分B) 因此,通过时间的下一个小提琴(一对夫妇的加入新行)执行结果是3个看不见的职位数,而实际上它应该是2 http://sqlfiddle.com/#!2/1e750b/1
我认为这个问题只会发生,如果最新的未见过的帖子(如A部分小提琴中的记录677)被删除后。因此,这将是很好的仅包括在计数删除的文章,如果他们是最近的看不见的职位(S)和(B部分提琴在创纪录的677)看不见的非删除后前不来。
我希望这是有道理的。
我对你的要求有些困惑。当你说你不想计算已删除的帖子时,我会解释它。如果是这种情况,你可以添加AND删除<> 1到第一个where子句? –
嗨拉兹。不,我们希望统计已删除的帖子,但只能统计一次。作为最有可能看不见的删除帖子(它在被看到之前被删除),它永远不会被看到,因此它可以被计数两次 - 我们不希望发生这种情况。但它确实需要计算一次。 – Martin
它是如何计算两次?有3行比上次看到的帖子更新,结果是3.所以他们每个人只被计算一次。 – Barmar