您在這裡

排行榜和排名(排名紀錄)

hanamizuki's 的頭像
hanamizuki 在 2008-10-26 (周日) 16:15 發表

Hi,

我想做個會員排行榜,依照usernode點閱次數和userpoint來排,
我的db_query是這樣寫的。


<?php

$result = pager_query("SELECT u.uid, u.access FROM {users} u INNER JOIN {profile_values} v ON u.uid = v.uid INNER JOIN {node} n ON u.uid = n.uid INNER JOIN {node_counter} c ON n.nid = c.nid INNER JOIN {userpoints} p ON u.uid = p.uid WHERE v.fid = 2 AND v.value != '' AND u.access != 0 AND u.status != 0 ORDER BY c.totalcount*0.5+p.points*0.5 DESC", 12, 0, NULL);

?>

可以順利依照每個會員usernode閱讀總次數50%+會員分數50%計算來排名,
不過有個大問題,就是我不知道如何知道「某個會員」是第幾名,
因為排序下來雖然正確,可是沒有排行榜重要的「排名」,
我還希望能在pager之後知道「該會員排名第幾」以及「該會員排名在第幾頁」這樣。

更進階一點,還希望可以記錄該會員的排名記錄,每週固定時間抓她的排名數字。

不知有沒有什麼方向讓我參考呢?

另外,有個叫user karma的模組,不知是啥?

不然,用簡單一點的想法。

比方說用Views製作一個熱門文章排行榜,那有辦法在排行的table加上流水號嗎?
這樣才知道這是第幾名的文章。

再進階一點,就是希望能記錄這篇文章上過幾次熱門文章排行榜。

不知這種東西要怎麼取名,所以也不知要去module的哪裡找。或是用什麼方式寫。

試試

set @rank= 0;
SELECT u.uid, u.access, (@rank:=@rank + 1) as rank
FROM {users} u
INNER JOIN {profile_values} v ON u.uid = v.uid
INNER JOIN {node} n ON u.uid = n.uid
INNER JOIN {node_counter} c ON n.nid = c.nid
INNER JOIN {userpoints} p ON u.uid = p.uid
WHERE v.fid = 2 AND v.value != '' AND u.access != 0 AND u.status != 0
ORDER BY c.totalcount*0.5+p.points*0.5 DESC;