web-dev-qa-db-ja.com

ビューの投票(投票API)から現在のノードのランクを表示する

タイトル通り。私はプログラミングに苦労していますが、運がありません。 APIを投票するメカニズムは私には複雑すぎます。投票によって現在のノードランク(注文番号)を表示するにはどうすればよいですか?

私の見解:

ソート基準:(投票結果)投票結果:関数desc

関係ノード:投票結果

すべての結果を表示する場合、phpフィールドモジュールの表示により、注文番号が表示されます。

現在の単一ノードのランクでの位置の表示は私にとって地獄です。カスタムSQLクエリがまったく機能しません。

私は投票APIとレートモジュールを使用しています。

助けてください。

[〜#〜]編集[〜#〜]

私は+ 1/-1を使用しているので、次のことを試みます:

  1. 合計+1投票
  2. 合計-1票
  3. +1の合計から-1票の合計を引く

コード:

$plus_rates = db_query("SELECT count(value) AS sum, content_id AS nid FROM votingapi_vote WHERE tag = 'vote' AND value_type = 'points' AND value = 1 GROUP BY content_id ORDER BY sum DESC, nid ASC");
                                         $minus_rates = db_query("SELECT count(value) AS sum, content_id AS nid FROM votingapi_vote WHERE tag = 'vote' AND value_type = 'points' AND value = -1 GROUP BY content_id ORDER BY sum DESC, nid ASC");


                     $pluses = array();
                                         $minuses = array();

                     while ( $row = db_fetch_object($plus_rates) ) {

                                            $pluses[$row->nid] = $row->sum;         

                     }

                                         $plus_rates = NULL;

                                         while ( $row = db_fetch_object( $minus_rates ) ) {

                                            $minuses[$row->nid] = $row->sum;

                                         }

                                         $minus_rates = NULL;

                                         $keys = array_keys($minuses);

                                         foreach($keys as $k) {

                                                if (array_key_exists($k, $pluses)) {

                                                        $pluses[$k] = $pluses[$k] - $minuses[$k];

                                                }

                                         }

                                         arsort($pluses, SORT_NUMERIC);

                                         firep($pluses, 'pluses');

$ plusesはDESCでソートされていますが、順序は私のビュー表示とはまったく異なります。

  • Cirteriaの並べ替え:(投票結果)投票結果:関数desc)
  • 関係ノード:投票結果、集計関数:合計スコア

編集2

私はvotingapi_cacheを直接クエリしようとしますが、それでも順序はビューの場合とはまったく異なります。

SELECT値、content_id FROM votingapi_cache WHERE value_type = 'points' AND tag = 'vote' AND FUNCTION = 'sum' ORDER BY value DESC LIMIT 0、30

3
Codium

わかった

最初の表示設定(メインの評価リストの表示):

並べ替え基準:

(投票結果)投票結果:Value desc、ノード:Nid asc

コード:

$result = db_query("SELECT c.content_id AS nid, c.value AS sum
                                                                FROM votingapi_cache AS c
                                                                INNER JOIN node AS n ON c.content_id = n.nid
                                                                WHERE c.value_type = 'points'
                                                                AND c.tag = 'vote'
                                                                AND c.function = 'sum'
                                                                AND n.type = 'profile'
                                                                AND n.status = 1
                                                                ORDER BY sum DESC , nid ASC
                                                        ");
                           $is_rated = FALSE; 

                                     while ($row = db_fetch_object($result)) {

                                        $counter++;

                                         if ($profile->nid == $row->nid) {

                                            $is_rated = TRUE;
                                          break;

                                         }

                                     }

実際には、一時テーブルとキャッシュも有効にする必要があります。

0
Codium

この質問のコメントを確認してください: ビュー内の評価値を視覚化する問題

おそらくノード:投票結果の関係に集約関数を設定していないようです。あなたは間違いなくあなた自身のコードを書かずにビューの総投票数を表示します。

1
Chaulky

votingapi_voteは、ビューで直接アクセスできるテーブルではありません。 data module を使用すると、ビューにアクセスできるようにして、ビューを直接作成できるようになります。ノードを介して行うよりも低いレベルになりますが、あなたにとってはより簡単かもしれません。

1
Jeremy French