请参阅以下示例数据:
'messages' table data:
id, date, user, seen
674, 1399430687, 2, 0
675, 1399430957, 2, 1399431766
676, 1399431065, 1, 1399431766
677, 1399431723, 2, 1399431766
678, 1399434322, 2, 0
679, 1399434330, 2, 0
我想仅对最近的未见(看到= 0)记录进行特定用户(用户:2)UP的计数,并且仅对下一个看到的记录(见> 0)进行计数。所以在上面的例子中,有3个看不见的(看到= 0)记录给用户(用户:2)但其中只有2个我感兴趣,因为下一个1在它之间有一些看到的记录。因此在上面的场景中,将返回2的计数(而不是实际记录)。
此外,如果看到用户(用户:2)的最新记录(见> 0),则应返回0的计数。我无法理解如何在mysql中执行此操作,或者如何真正描述它。
这是我能解决的问题,但在上面的场景中,这将导致3,而不是2:
SELECT COUNT( * )
FROM `messages`
WHERE seen = 0
AND user = 2
ORDER BY DATE DESC
我希望这是有道理的。
感谢。
答案 0 :(得分:1)
您需要找到最新的非零看到的数据,然后在此之后进行过滤。
SELECT Count(id) FROM data WHERE user = 3 AND seen = 0
AND date > (
SELECT coalesce(MAX(date),0) FROM data WHERE seen <> 0 AND user = 3
);
编辑: 如果用户根本没有看到任何记录,则前面的代码将不会返回正确答案,此代码通过返回0而不是null来修复它。