插件或主题,将帖子排序为‘今年排名第一’和‘上个月排名靠前’?

时间:2011-03-22 作者:janoChen

是否有任何免费的WordPress插件或主题可以根据投票结果将帖子排序为“今年最佳”、“上月最佳”或“24小时最佳”?

我正在使用the Vote It Up plugin 马上但它不具备将帖子作为循环进行排序的功能。

有什么建议吗?

2 个回复
最合适的回答,由SO网友:anu 整理而成

试试GD星级-我很确定它存储投票时间,所以可以用来做这件事-你可能需要自己提取排序。

http://www.gdstarrating.com/

SO网友:t31os

除非插件切换到以不同的方式存储投票,否则就不会有基于投票进行排序的好方法。

看看投票表中的一行。

+-------------------------------------------------------+
| ID | post |  votes  | guests | usersinks | guestsinks |
+-------------------------------------------------------+
| 1  | 1234 | ,1,2,3  |        |           |            |
+-------------------------------------------------------+
所有用户的投票都存储在一个单列(投票)中,MySQL没有合适的方法根据该列进行拆分、计数和排序。

也许一些MySQL忍者可以创建一个过程/函数来实现这一点,但这超出了我的SQL专业知识。

不知道作者为什么选择这样存储投票,但从结果排序的角度来看,这是一个糟糕的DB设计决策(imo)。

我很感激我没有真正解决这个问题,但我想指出这一点可能很好,虽然理论上这可能很容易,但有一个很好的理由,作者没有为这个插件提供这个功能-他的db设计使得基于投票的排序非常困难(至少在SQL级别)。

如果我写这样一个插件,我会这么做。。

使用一个新表仅保留投票,所有投票。。

表中有一些虚构的数据。

Table: wp_post_votes
Type: new
+--------------------------------------------+
|  ID    |  post_id |  user_id  |  type      |
+--------------------------------------------+
|  1     |  123     |   10      |  up        |
|  2     |  123     |   22      |  down      |
|  3     |  123     |   4       |  up        |
|  4     |  123     |   1       |  up        |
|  5     |  25      |   6       |  up        |
|  6     |  25      |   10      |  up        |
|  7     |  25      |   1       |  down      |
|  8     |  25      |   2       |  up        |
+--------------------------------------------+
除此之外,我还使用usermeta和Posteta存储帖子和用户投票的投票计数。

这里有一些虚构的元数据来帮助可视化。

Table: wp_postmeta
Type: core, existing
+-----------------------------------------------------------+
|  meta_id  |  post_id   |   meta_key   |   meta_value      |
+-----------------------------------------------------------+
|  512      |   123      |  vote_count  |        4          |
|  513      |   25       |  vote_count  |        4          |
+-----------------------------------------------------------+

Table: wp_usermeta
Type: core, existing
+-----------------------------------------------------------+
|  umeta_id  |  user_id  |  meta_key   |  meta_value        |
+-----------------------------------------------------------+
|  443       |   1       |  vote_count |       2            |
|  445       |   2       |  vote_count |       1            |
|  442       |   4       |  vote_count |       1            |
|  444       |   6       |  vote_count |       1            |
|  440       |   10      |  vote_count |       2            |
|  441       |   22      |  vote_count |       1            |
+-----------------------------------------------------------+
这样一来,可以根据元值对帖子进行排序,另外利用元表意味着可以快速访问更新和获取函数,如get_user_meta, get_post_meta, update_post_meta ... 等等(我相信你明白了)。

只是大声想一想,因为你的问题让我思考我应该如何做得不同。。

相关推荐

插件或主题,将帖子排序为‘今年排名第一’和‘上个月排名靠前’? - 小码农CODE - 行之有效找到问题解决它

插件或主题,将帖子排序为‘今年排名第一’和‘上个月排名靠前’?

时间:2011-03-22 作者:janoChen

是否有任何免费的WordPress插件或主题可以根据投票结果将帖子排序为“今年最佳”、“上月最佳”或“24小时最佳”?

我正在使用the Vote It Up plugin 马上但它不具备将帖子作为循环进行排序的功能。

有什么建议吗?

2 个回复
最合适的回答,由SO网友:anu 整理而成

试试GD星级-我很确定它存储投票时间,所以可以用来做这件事-你可能需要自己提取排序。

http://www.gdstarrating.com/

SO网友:t31os

除非插件切换到以不同的方式存储投票,否则就不会有基于投票进行排序的好方法。

看看投票表中的一行。

+-------------------------------------------------------+
| ID | post |  votes  | guests | usersinks | guestsinks |
+-------------------------------------------------------+
| 1  | 1234 | ,1,2,3  |        |           |            |
+-------------------------------------------------------+
所有用户的投票都存储在一个单列(投票)中,MySQL没有合适的方法根据该列进行拆分、计数和排序。

也许一些MySQL忍者可以创建一个过程/函数来实现这一点,但这超出了我的SQL专业知识。

不知道作者为什么选择这样存储投票,但从结果排序的角度来看,这是一个糟糕的DB设计决策(imo)。

我很感激我没有真正解决这个问题,但我想指出这一点可能很好,虽然理论上这可能很容易,但有一个很好的理由,作者没有为这个插件提供这个功能-他的db设计使得基于投票的排序非常困难(至少在SQL级别)。

如果我写这样一个插件,我会这么做。。

使用一个新表仅保留投票,所有投票。。

表中有一些虚构的数据。

Table: wp_post_votes
Type: new
+--------------------------------------------+
|  ID    |  post_id |  user_id  |  type      |
+--------------------------------------------+
|  1     |  123     |   10      |  up        |
|  2     |  123     |   22      |  down      |
|  3     |  123     |   4       |  up        |
|  4     |  123     |   1       |  up        |
|  5     |  25      |   6       |  up        |
|  6     |  25      |   10      |  up        |
|  7     |  25      |   1       |  down      |
|  8     |  25      |   2       |  up        |
+--------------------------------------------+
除此之外,我还使用usermeta和Posteta存储帖子和用户投票的投票计数。

这里有一些虚构的元数据来帮助可视化。

Table: wp_postmeta
Type: core, existing
+-----------------------------------------------------------+
|  meta_id  |  post_id   |   meta_key   |   meta_value      |
+-----------------------------------------------------------+
|  512      |   123      |  vote_count  |        4          |
|  513      |   25       |  vote_count  |        4          |
+-----------------------------------------------------------+

Table: wp_usermeta
Type: core, existing
+-----------------------------------------------------------+
|  umeta_id  |  user_id  |  meta_key   |  meta_value        |
+-----------------------------------------------------------+
|  443       |   1       |  vote_count |       2            |
|  445       |   2       |  vote_count |       1            |
|  442       |   4       |  vote_count |       1            |
|  444       |   6       |  vote_count |       1            |
|  440       |   10      |  vote_count |       2            |
|  441       |   22      |  vote_count |       1            |
+-----------------------------------------------------------+
这样一来,可以根据元值对帖子进行排序,另外利用元表意味着可以快速访问更新和获取函数,如get_user_meta, get_post_meta, update_post_meta ... 等等(我相信你明白了)。

只是大声想一想,因为你的问题让我思考我应该如何做得不同。。

相关推荐