php - 数据排名/排序的正确且最有效的方法是什么

标签 php mysql database wordpress

我正在尝试了解 WordPress 帖子的排名功能。

我有一个包含数千个帖子的自定义帖子类型。这些帖子中的每一篇都有称为分数(数字)的元数据。我想根据分值对所有这些帖子进行排名。因此 post_id 和 Score 是我正在寻找的两个值。帖子的排名位置将在我网站的各个地方使用。

现在正确且最有效的方法是什么?我应该:

  1. 只需获取所有 post_ids 和分数并将它们存储在一个数组中。按分数对数组进行排序,并获取所需的 postID 在数组中的位置,即排名。

  2. 创建一个单独的表,用 post_id 和分数集填充它,然后对表进行排序。每当帖子和度假村中的分数发生变化时,请更新此表。

  3. 创建一个单独的表,用 post_id 和分数集填充它并对表进行排序。仅定期更新(例如每 30 分钟)以降低负载?

我需要这个的目的是在每个帖子中显示分数,并且还有一个排名小部件使用排名数据。因此,如果数据始终是最新的(分数调整后 -> 排名更新),那就太好了。但是,如果这会给数据库/服务器造成沉重的负载,如果数据不是真正最新的,而是 X 分钟的旧数据,我也没关系。

由于我对数据库还很陌生,所以我很难弄清楚不同方法会创建什么负载。如果有人能指出我正确的方向,那就太好了。

最佳答案

由于排名不是静态过程,因此每次对表进行插入或更新时都需要更新排名 我建议您在查询中处理该问题,例如:

SELECT @rownum:=@rownum + 1 as row_number, 
       t.*
FROM ( 
   < your ordered query goes here >
) t,
(SELECT @rownum := 0) r

关于php - 数据排名/排序的正确且最有效的方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19564712/

相关文章:

PHP 和 MySQL : php is not finding the image path given by mysql

php - 如何使用 GET 将加密消息传递到浏览器?

php - 动态改变 css 元素宽度

c# - 外键、私钥 MSSQL 1 :1 and 1:Many issues

php - Twig 和 PHP 的问题

一个查询中有多个选择语句的 PHP/MySQL 问题

mysql - kernel limit "open file limit "和mysql "Opened_files"相关吗?

php - Num_Rows 中未选择任何数据库

android - 为什么我的 Cursor 在 Android Activity 中没有关闭?

c# - 如何在(流利的)NHibernate 中使用字符串键