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


31

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

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

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


重複とその対策の理由を誰かが説明してくれれば、それは実際に素晴らしいことです。「たぶん」機能する5つのソリューションがあるのは半最適なだけ
です-n3rd

回答:


19

ビューの集計設定を有効にして重複レコードを削除することにより、GROUP BYまたはDISTINCTを適用できます。
1.および編集ビュー
2. 上級»他の有効にすることで、セクションを使用する凝集を:はい
3.でFIELDSまたはフィルタ基準のセクションを選択して適用する集計の設定は、グループによって、または個別にしたいフィールドをのために。


2
サンプルの問題があり、使用集計を有効にしますが、フィールドにはdistinct選択がありません。集計タイプで選択するタイプはどれですか?
ユセフ

39

ビューで個別の値を実現する簡単な方法は、次のことを行うことです。

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

私の質問では、クエリ設定で「個別」オプションをチェックしたことをすでに述べました。
アフマド

ユージンとクライヴ、仕事です。これを共有してくれてありがとう。

8

ビューを使用して個別の値を実現する簡単な方法は、次のことです。

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

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

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

5

この質問には既に回答されていることは知っていますが、使用するためにこれらのソリューションが機能しない場合があります。しかし、いくつかの調査を行った後、自分のニーズに合ったソリューションを見つけました。

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

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


ビュー3.3以降でDISTINCTが正しく機能しないという既知の問題があることを付け加えます。
パトリック

1
上記を実行する代わりに、ビューの名前を確認してからグループを追加することができます。
ポトニースウィッターズ

それは素晴らしい作品です。これを除いて、ここでの解決策はありませんでした...コーディングは常に最終的な解決策を見つけるために
揺れ

4

同じ問題がありました。最終的に、Views Distinctモジュールをインストールすることで解決しました。

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


0

複数値の日付フィールドに問題がありました。項目は、日付が入力されるたびに表示されました。ここで言及した他のソリューションはどれも私にとってはうまくいきませんでした。しかし、その後、私はまだそこにD7 動作するD6ソリューションを見つけました。

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;
    }
  }
}

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


0

古いスレッドを起動するのではなく、答えは(Drupal 7と公開された検索フィルターを使用している場合)、「search:search terms」の下の「検索スコアの削除」をチェックすることです。

「フィルター基準」の下

「検索:検索語」を追加

[検索スコアの削除]をオンにします

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

保存をクリックします


0

これらの他の方法はどれも役に立たなかったが、Views Random Seedモジュールが実際にそのトリックを行った。とはいえ、私の問題はポケットベルの使用に関連していました。そのモジュールのプロジェクトページからの引用は次のとおりです。

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


0

私は複数Date fieldsあり、の始まりでソートしたいFIRST date...ここでそれがどのように機能したかです:Views->advanced->Other: use aggregation: YES そしてそして: SORT CRITERIA->Aggregation settings->Aggregation type: COUNT

countインスタンスの代わりに番号を提供する予定でしたが、結果が明確になりました...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.