2012-12-14 31 views
0

我在社區論壇上有一個「喜歡」系統。所有內部喜歡都存儲在一個名爲log_like的數據庫中。MySQL - 在過去一個月內獲得最「喜歡」的用戶

CREATE TABLE `log_like` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `id_member` mediumint(8) NOT NULL, 
    `id_message` int(10) NOT NULL, 
    `id_poster` mediumint(8) NOT NULL DEFAULT '0', 
    `time` int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`), 
    KEY `id_member` (`id_member`), 
    KEY `id_message` (`id_message`) 
) ENGINE=MyISAM; 

我需要得到上個月最喜歡的成員ID(上面DDL中的id_poster字段)。所以我可能需要GROUP和COUNT在過去的月份的記錄中出現相同的「id_poster」多少次。我想限制它到最喜歡的10個。字段「time」存儲unix時間以供參考。

不幸的是,我不知道如何做到這一點。誰能幫忙?

回答

1

所以,這裏是我結束了:

SELECT 
    id_poster, 
    COUNT(1) AS like_count 
FROM 
    log_like 
WHERE 
    time BETWEEN UNIX_TIMESTAMP('2012-11-01') AND UNIX_TIMESTAMP('2012-12-01') 
GROUP BY 
    id_poster 
ORDER BY 
    like_count 
DESC 
LIMIT 10 

這樣,我得到過去的一個月(2012年11月)頂部的結果,而不是過去的30天,從現在像以前建議。 (非常感謝Barmar所有的工作)

1
select id_poster, count(*) like_count 
from log_like 
where time > unix_timestamp(date_sub(now(), interval 1 month)) 
group by id_poster 
order by like_count desc 
limit 10 

如果您在id_poster上有索引,這將是最好的。

+0

非常感謝。但是,我假設date_sub()基於MySQL日期,並且我在Unix時間戳(自epoch以來的秒數)中有時間參考。因此,我的MySQL查詢沒有結果。 – BornKillaz

+0

我添加了'unix_timestamp()'函數。你自己也無法弄清楚這一點嗎? – Barmar

+0

是的,在我回復之後,我添加了UNIX_TIMESTAMP(),因爲我的時間字段位於unix時間戳記(自epoch以來的秒數)。但是,我沒有得到每個頂級成員的喜歡SUM,而是在結果集中得到整數「1」。我想彙總每個成員,換句話說,數據庫中引用前10位id_poster的次數(一行等於一個)。 – BornKillaz

0
SELECT DISTINCT id, count(*) as '#oflikes' from log_like 
WHERE 
    time BETWEEN UNIX_TIMESTAMP('2012-11-01') AND UNIX_TIMESTAMP('2012-12-01') 
LIMIT 10; 
相關問題