我试图围绕wordpress帖子的排名功能。
我有一个包含数千个帖子的自定义帖子类型。这些帖子中的每一个都有称为得分的元数据(这是数字)。我希望根据分数值对所有这些帖子进行排名。因此post_id和得分是我正在寻找的两个值。帖子的排名位置将用于我网站的不同位置。
现在这样做的正确和最有效的方法是什么?我应该:
只需获取所有post_id和得分并将其存储在数组中。按分数对数组进行排序,并获得数组中所需postID的位置,即排名。
创建一个单独的表,用post_id和得分集填充它,然后对表进行排序。每次分数在帖子和度假村中发生变化时,请更新此表。
创建一个单独的表,用post_id和得分集填充它并对表进行排序。只定期更新(例如每30分钟一次)以保持负载?
我需要的是在每个帖子中显示分数,并且还有排名小部件使用排名数据。因此,如果数据始终是最新的(调整后的分数 - >排名更新),那就太棒了。但是,如果这会在数据库/服务器上造成沉重的负担,那么如果数据不是最新的,那么我也会没事,但是X分钟就可以了。
由于我对数据库很陌生,我很难搞清楚不同方法会产生什么样的负载。如果有人能把我推向正确的方向,那就太好了。
答案 0 :(得分:1)
由于排名不是静态过程,因此每次在表中插入或更新时都需要更新 我建议你在查询中处理它,如:
SELECT @rownum:=@rownum + 1 as row_number,
t.*
FROM (
< your ordered query goes here >
) t,
(SELECT @rownum := 0) r