mysql 投票总排行_MySQL投票表,查找每个用户对条目的最新投票,并根据值进行计数...
[編輯:]我添加了值(1052,10,3,1290839091,1)以更好地解決問題,并且必須將“item_id”添加到提取最新投票的子查詢中.
好極了!最后一個stackoverflow問題,我實際上可以回答!我已經瀏覽了一個星期尋找短暫的東西;甜蜜的我的胡同.感謝有趣的SQL問題!
首先,你需要提取最新的選票. (voter_id,item_id,vote_date)的組合更適合這種工作方式!
SELECT
voter_id, item_id, MAX(vote_date) AS vote_date
FROM
votes
GROUP BY
voter_id, item_id
結果:
+----------+---------+------------+
| voter_id | item_id | vote_date |
+----------+---------+------------+
| 3 | 9 | 1275021495 |
| 3 | 10 | 1290839091 |
| 27 | 9 | 1273770151 |
| 45 | 9 | 1274896188 |
| 181 | 9 | 1290839090 |
+----------+---------+------------+
然后你需要加入原始表格來反對這些結果.子選擇將完成這項工作.請注意上面的查詢是如何復制&粘貼到下面的連接中,但現在它的名稱為“tmp”:
SELECT
v.*
FROM (
SELECT
voter_id, item_id, MAX(vote_date) AS vote_date
FROM
votes
GROUP BY
voter_id, item_id
) tmp
INNER JOIN
votes v ON ( v.vote_date = tmp.vote_date
AND v.voter_id = tmp.voter_id
AND v.item_id = tmp.item_id
)
結果:
+---------+---------+----------+------------+------+
| vote_id | item_id | voter_id | vote_date | vote |
+---------+---------+----------+------------+------+
| 60 | 9 | 27 | 1273770151 | 1 |
| 153 | 9 | 45 | 1274896188 | 1 |
| 164 | 9 | 3 | 1275021495 | 2 |
| 1051 | 9 | 181 | 1290839090 | 1 |
| 1052 | 10 | 3 | 1290839091 | 1 |
+---------+---------+----------+------------+------+
我相信你知道從這里做什么….哦,我不能幫助自己,這太可愛了:
SELECT
v.item_id, SUM(2 - v.vote) AS likes, SUM(v.vote - 1) AS dislikes
FROM (
SELECT
voter_id, item_id, MAX(vote_date) AS vote_date
FROM
votes
GROUP BY
voter_id, item_id
) tmp
INNER JOIN
votes v ON ( v.vote_date = tmp.vote_date
AND v.voter_id = tmp.voter_id
AND v.item_id = tmp.item_id
)
GROUP BY
v.item_id
結果:
+---------+-------+----------+
| item_id | likes | dislikes |
+---------+-------+----------+
| 9 | 3 | 1 |
| 10 | 1 | 0 |
+---------+-------+----------+
總結
以上是生活随笔為你收集整理的mysql 投票总排行_MySQL投票表,查找每个用户对条目的最新投票,并根据值进行计数...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于matlab的频域辨识,基于Lab
- 下一篇: 怪哉翻译软件测试,[东方朔传翻译]东方朔