タイトル通り。私はプログラミングに苦労していますが、運がありません。 APIを投票するメカニズムは私には複雑すぎます。投票によって現在のノードランク(注文番号)を表示するにはどうすればよいですか?
私の見解:
ソート基準:(投票結果)投票結果:関数desc
関係ノード:投票結果
すべての結果を表示する場合、phpフィールドモジュールの表示により、注文番号が表示されます。
現在の単一ノードのランクでの位置の表示は私にとって地獄です。カスタムSQLクエリがまったく機能しません。
私は投票APIとレートモジュールを使用しています。
助けてください。
[〜#〜]編集[〜#〜]
私は+ 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でソートされていますが、順序は私のビュー表示とはまったく異なります。
編集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
わかった
最初の表示設定(メインの評価リストの表示):
並べ替え基準:
(投票結果)投票結果: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;
}
}
実際には、一時テーブルとキャッシュも有効にする必要があります。
この質問のコメントを確認してください: ビュー内の評価値を視覚化する問題
おそらくノード:投票結果の関係に集約関数を設定していないようです。あなたは間違いなくあなた自身のコードを書かずにビューの総投票数を表示します。
votingapi_vote
は、ビューで直接アクセスできるテーブルではありません。 data module を使用すると、ビューにアクセスできるようにして、ビューを直接作成できるようになります。ノードを介して行うよりも低いレベルになりますが、あなたにとってはより簡単かもしれません。