web-dev-qa-db-ja.com

ランダムソートを使用するときに重複を削除するにはどうすればよいですか?

ノードのタイトルとロゴ(cckフィールド)を表示するビューを作成しました。引数では、分類用語の名前を渡しました。

結果では、ノードが2〜3回表示されています。クエリ設定で個別のチェックボックスをすでにオンにしましたが、これも機能しません。私はランダムなソートを使用しましたが、これは重複を引き起こすようです。ランダムソートを削除すると、正常に機能します。

ランダムソートを無効にせずに重複を回避するにはどうすればよいですか?

30
Ahmad

ビューの集計設定を有効にして重複レコードを削除することで、GROUP BYまたはDISTINCTを適用できます。
1。移動してビューを編集します
2。 Advanced"OTHERセクションを有効化se aggregate:Yes
3。 [〜#〜] fields [〜#〜]またはFILTER CRITERIAセクションで、グループ化するフィールドに対してAggregation settingsを選択して適用しますによって、または明確に。

19
Sithu

ビューで個別の値を取得する簡単な方法は、次のようにすることです。

  1. 移動してビューを編集します
  2. [詳細設定]"[その他]セクションで、[クエリ設定]をクリックします
  3. 「個別」チェックボックスをオンにします。
39
Eugene Fidelin

ビューを使用して個別の値を取得する簡単な方法は、次のとおりです。

  1. 移動してビューを編集します
  2. [詳細設定]"[その他]セクションで、[クエリ設定]をクリックします
  3. 「個別」チェックボックスをオンにします。

ビューの集計設定を有効にして重複レコードを削除することで、GROUP BYまたはDISTINCTを適用できます。

  1. 移動してビューを編集します
  2. [詳細]"[その他]セクションで、[集計の使用]を有効にして:はい
  3. FIELDSまたはFILTER CRITERIAセクションで、グループ化または区別するフィールドの集計設定を選択して適用します。
8
no name

この質問にはすでに回答済みですが、一部の用途ではこれらのソリューションは機能しません。しかし、いくつかの調査を行った後、自分のニーズに合った解決策を見つけました。

私はこれを修正することができる本当に便利な回避策を見つけました。 DropBucketにコードスニペットを投稿しました。基本的に、Drupal 7クエリ変更フックを実装し、groupby句とフィールドを指定するクエリコメントのすべてのビュークエリをチェックします。次に、そのgroupbyをSQLクエリに追加します。

/**
 *  Found this trick on theoleschool.com.
 *  
 *  Description: Allows the view developer to specify the query
 *  group by action in the query comments. Great way to force the
 *  removal of duplicates.
 *  
 *  Just go into your query comments and type in "groupby:" with
 *  that colon followed by the field you want to group by.
 * 
 *  Examples...
 *  groupby:node.nid
 *  groupby:file_managed_file_usage.fid
 * 
 *  Ref-Comment: http://theoleschool.com/comment/496#comment-496
 *  Ref-Article: http://theoleschool.com/blog/using-hookviewsalter-add-group-statement
 */
function mymodule_query_alter(QueryAlterableInterface $query) {
  if ($query->hasTag('views')) {
    static $count;
    $view =& $query->getMetaData('view');

    if (strstr($groupby = $view->query->options['query_comment'], 'groupby')) {
      list($action, $field) = explode(':', $groupby);

      if (strlen($field) > 0) {
        $query->groupBy($field);
      }
    }
  }
}

http://dropbucket.org/node/15

ソース参照はページのコメントにあります。

5
Patrick

私も同じ問題を抱えていました。最終的に私は Views Distinct モジュールをインストールすることで解決しました。

多くの場合、ビューの関係や他の結合は、「重複した」結果を作成します。たとえば、複数の値を持つフィールドを持つノードは、複数値フィールドの値ごとに1回ビューに表示される場合があります。それはイライラさせられ、結果の行は技術的に異なるため、ビューUIの「DISTINCT」SQLクエリオプションは実際には問題を解決しません。 Views Distinctは、これらの「重複した」行を削除または集約する簡単なGUIメソッドを提供することを目的としています。

4
雨滴米

複数値の日付フィールドに問題がありました。アイテムは、日付が入力されるたびに表示されました。ここで述べた他の解決策はどれも私にとってはうまくいきませんでした。しかし、それでもD7で機能するD6ソリューションを見つけました there

hook_views_pre_render(&$view)は魔法の言葉です。この例では、1つの特定のビューのみの1つの特定の表示に制限されています。それが役に立てば幸い。

function MYMODULE_views_pre_render(&$view) {
  $used_nids = array();

  if ($view->name == 'events') {

    if ($view->current_display == 'page_2') {

      foreach ($view->result as $row) {

        if (!in_array($row->nid, $used_nids)) {

          $new_view_result[] = $row;
          $used_nids[] = $row->nid;
        }
      }
      $view->result = $new_view_result;
    }
  }
}

EDIT:残念ながら、制限が設定されている場合、ビューから重複アイテムの数が減ります。誰かがこれに対する解決策を見つけた場合は、コメントしてください!

0
leymannx

これらの他の方法はどれも私にとってはうまくいきませんでしたが、 Views Random Seed モジュールが実際にうまくいきました。しかし、私の問題はポケットベルの使用に関連していた。以下は、そのモジュールのプロジェクトページからの引用です。

ランダムオーダーハンドラーとシードを追加します。定数整数引数Nがsql Rand()関数で指定されている場合、それはシード値として使用され、列値の反復可能なシーケンスを生成します。これにより、ページングを行い、アイテムを2回表示しないようにすることができます。 PHPを使用してカスタムシードを計算することもできます。これにより、日付などの変数に基づいて擬似乱数を作成できます。

0
Mike Pfeiffer

古いスレッドを目覚めさせるのではなく、答えは(Drupal 7および公開された検索フィルターを使用する場合)、「search:search terms」の下の「remove search score」をチェックすることです。

「フィルター基準」の下

「検索:検索用語」を追加

「検索スコアの削除」をチェックします

「適用(すべてのディスプレイ)」をクリックします

保存をクリックします

0
Bryan