代码之家  ›  专栏  ›  技术社区  ›  Alex Miller

如何使用Drupal Fivestar平均评分对视图进行排序?

  •  2
  • Alex Miller  · 技术社区  · 15 年前

    我使用的是Drupal 6.13,视图6.x-2.6,投票API 6.x-2.3,Fivestar 6.x-1.18。

    我有一个内容类型,字段类型为Fivestar Rating。我有一个视图,我的意图是列出所有具有此内容类型的节点,这些节点按总体平均评级降序排序。该视图的工作原理是显示正确的信息(具有投票能力的用户投票和总体平均投票)。但我一辈子都不能让它正确分类。

    在视图中,我与“node:vote results”、value type=“percent”、vote tag=“normal”、聚合函数“average”有关系。

    我尝试过很多方法,但是我希望能用(投票结果)投票结果添加一个“排序标准”:值和降序。当我这样做时,如果我查看SQL查询并看到“order by node_title asc”,这显然是不对的。我希望看到“按VotingAPI缓存节点投票百分比平均值描述排序”。任何提示都将是最受欢迎的。

    这里查询:

    SELECT node.nid AS nid,
       node.title AS node_title,
       profile_values_profile_full_name.value AS profile_values_profile_full_name_value,
       users.uid AS users_uid,
       votingapi_vote_node_percent_vote_curuser.value AS votingapi_vote_node_percent_vote_curuser_value,
       votingapi_cache_node_percent_vote_average.value AS votingapi_cache_node_percent_vote_average_value
     FROM node node 
     LEFT JOIN votingapi_cache votingapi_cache_node_percent_vote_average ON node.nid = votingapi_cache_node_percent_vote_average.content_id AND (votingapi_cache_node_percent_vote_average.content_type = 'node' AND votingapi_cache_node_percent_vote_average.value_type = 'percent' AND votingapi_cache_node_percent_vote_average.tag = 'vote' AND votingapi_cache_node_percent_vote_average.function = 'average')
     LEFT JOIN votingapi_vote votingapi_vote_node_percent_vote_curuser ON node.nid = votingapi_vote_node_percent_vote_curuser.content_id AND (votingapi_vote_node_percent_vote_curuser.content_type = 'node' AND votingapi_vote_node_percent_vote_curuser.value_type = 'percent' AND votingapi_vote_node_percent_vote_curuser.tag = 'vote' AND votingapi_vote_node_percent_vote_curuser.uid = '***CURRENT_USER***')
     LEFT JOIN node_revisions node_revisions ON node.vid = node_revisions.vid
     LEFT JOIN users users_node_revisions ON node_revisions.uid = users_node_revisions.uid
     INNER JOIN users users ON node.uid = users.uid
     LEFT JOIN profile_values profile_values_profile_full_name ON users.uid = profile_values_profile_full_name.uid AND profile_values_profile_full_name.fid = '5'
     WHERE (node.type in ('passion_talk')) AND (node.status <> 0)
       ORDER BY node_title ASC
    
    2 回复  |  直到 11 年前
        1
  •  2
  •   Eaton    15 年前

    这很奇怪;VotingAPI中包含的“顶级内容”视图包括一个“Fivestar”显示,它准确地建立了您所描述的关系。它是工作的,还是显示出你遇到的问题?

        2
  •  1
  •   Alex Miller    15 年前

    啊,我明白了。我使用的是表格样式,在节点标题上设置了一个默认排序,导致忽略所有排序条件。