J'ai créé une vue où j'affiche le titre du nœud et un logo (un champ cck). Dans les arguments, j'ai passé le nom du terme de taxonomie.
Dans le résultat, un nœud affiche 2 ou 3 fois; J'ai déjà coché la case distincte dans les paramètres de requête, mais cela ne fonctionne pas non plus. J'ai utilisé le tri aléatoire, qui semble provoquer les doublons; lorsque je supprime le tri aléatoire, cela fonctionne très bien.
Comment puis-je éviter les doublons sans désactiver le tri aléatoire?
Vous pouvez appliquer GROUP BY ou DISTINCT en activant les paramètres d'agrégation des vues pour supprimer les enregistrements en double.
1. Allez modifier votre vue
2. Dans Avancé "AUTRE section en activant tiliser l'agrégation: Oui
3. Dans CHAMPS ou FILTER CRITERIA section, sélectionnez et appliquez Paramètres d'agrégation pour quels champs vous voulez grouper par ou distinct.
La manière simple d'obtenir des valeurs distinctes dans une vue consiste à effectuer les opérations suivantes:
La manière simple d'obtenir des valeurs distinctes à l'aide de Views est la suivante:
Vous pouvez appliquer GROUP BY ou DISTINCT en activant les paramètres d'agrégation des vues pour supprimer les enregistrements en double.
Je sais que cette question a déjà été répondue, mais pour certaines utilisations, ces solutions ne fonctionnent pas. Cependant, après avoir fait quelques recherches, j'ai trouvé une solution qui répond à mes besoins.
J'ai trouvé une solution de contournement vraiment utile qui m'a permis de résoudre ce problème. J'ai publié l'extrait de code sur DropBucket. Fondamentalement, vous implémentez un crochet de modification de requête Drupal 7 qui vérifie toutes les requêtes de vues pour les commentaires de requête qui spécifient une clause et un champ groupby. Ensuite, il ajoute ce groupby à la requête 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);
}
}
}
}
La référence source se trouve dans les commentaires sur la page.
J'ai eu le même problème. Finalement, je l'ai résolu en installant le module Views Distinct .
Les relations ou autres jointures dans les vues créent souvent des résultats "en double". Par exemple, un nœud avec un champ qui a plusieurs valeurs peut apparaître dans la vue une fois par valeur dans le champ à plusieurs valeurs. C'est frustrant et l'option de requête SQL "DISTINCT" dans l'interface utilisateur des vues ne résout pas réellement le problème car la ligne de résultat est techniquement distincte. Vues distinctes vise à fournir une méthode graphique simple pour supprimer ou agréger ces lignes "en double".
J'ai plusieurs Date fields
et souhaitez trier par début de FIRST date
... Voici comment cela a fonctionné: Dans Views->advanced->Other: use aggregation: YES
Et alors: SORT CRITERIA->Aggregation settings->Aggregation type: COUNT
Je m'attendais à ce que count
me donne le numéro au lieu de l'instance, mais cela rendait le résultat distinct ...
Eu des problèmes avec les champs de date à valeurs multiples. Les éléments étaient affichés aussi souvent qu'une date était entrée. Aucune des autres solutions mentionnées ici n'a fonctionné pour moi. Mais j'ai trouvé une solution D6 qui fonctionne toujours en D7 là .
hook_views_pre_render(&$view)
est le mot magique. Dans l'exemple, il est limité à un certain affichage d'une seule vue. J'espère que cela aide.
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: Malheureusement, celui-ci soustrait le nombre d'éléments en double de la vue si une limite a été définie. Si quelqu'un trouve une solution à cela, veuillez commenter!
Aucune de ces autres méthodes n'a fonctionné pour moi, mais le module Views Random Seed a fait l'affaire. Cependant, mes problèmes étaient plus liés à l'utilisation d'un téléavertisseur. Voici une citation de la page de projet de ce module:
Ajoute un gestionnaire d'ordre aléatoire avec des graines. Si un argument d'entier constant N est spécifié dans la fonction sql Rand (), il est utilisé comme valeur de départ, ce qui produit une séquence répétable de valeurs de colonne. Cela permet d'avoir une pagination et de ne pas afficher les éléments deux fois. Il est également possible de calculer une graine personnalisée à l'aide de PHP, ce qui vous permet de créer des nombres pseudo aléatoires basés sur des variables telles que la date du jour.
Pas pour réveiller un vieux fil, mais la réponse (si vous utilisez Drupal 7 et un filtre de recherche exposé) est de cocher "supprimer le score de recherche" sous "recherche: termes de recherche".
Sous "Critères de filtrage"
Ajouter "Recherche: termes de recherche"
Cochez "Supprimer le score de recherche"
Cliquez sur "Appliquer (tous les affichages)"
Cliquez sur Enregistrer