我有用户的表" article_likes" 以及他们是喜欢还是不喜欢这篇文章。每个喜欢/不喜欢,日期时间会被保存,文章的 id 也会保存。 喜欢/不喜欢在"状态"中保存为bool。列。
id article_id user_id like_date status
1 8 2 2014-11-03 21:30:33 1
2 8 2 2014-11-03 21:31:00 0
3 8 3 2014-11-03 22:30:59 1
4 9 6 2014-11-03 22:36:25 1
5 9 2 2014-11-03 23:19:46 1
我喜欢得到一篇文章的数量。因此,只有最近日期的状态才有效。
所需的结果将是:
article_id amount_likes
8 1
9 2
我希望得到每篇文章ID的结果,所以不是一次性的。
任何人都可以帮助我吗?谢谢!
答案 0 :(得分:1)
这将解决您的问题:)
SELECT article_id, SUM(IF(status = 1, 1, -1)) AS amount_likes FROM article_likes
GROUP BY article_id
如果您将不喜欢存储为-1,则:
SELECT article_id, SUM(status) AS amount_likes FROM article_likes
GROUP BY article_id
答案 1 :(得分:0)
试试这个:
SELECT `article_id`,COUNT(`user_id`) AS amount_likes FROM `links`
WHERE `status`='1' GROUP BY DATE(`like_date`), `user_id`;
小提琴 - http://sqlfiddle.com/#!2/3b7bb6/4
希望有所帮助
答案 2 :(得分:0)
SELECT article_id, COUNT(IF(
SELECT CASE
WHEN status=1 THEN 'true'
ELSE 'false'
END),
'true','false'
)
)
FROM article_likes
GROUP BY article_id
ORDER BY article_id