Una forma de limitar esto en el código sería agregar algo como lo siguiente a un módulo personalizado:
function custom_views_pre_render(&$view) {
//get the rows from the view just before render
$results = $view->result;
//create a counter
$count = '';
//we're going to built up a new $result array
$new_results = array();
//iterate through each view row
foreach($results as $result) {
//find the taxonomy term
$term = $result->taxonomy_term_data_name;
//add the term to a string of all the terms we've seen so far
$count .= $term;
//make sure to separate them with spaces to make them easier to count
$count .= ' ' ;
//count how many rows have the same term as the current one
$term_count = array_count_values(str_word_count($count, 1));
if($term_count[$term] <= 3){
//if this is the third or fewer row with this term, add it to the new result array
$new_results[] = $result;
}
}
//instead of the normal view output, only show the results we put in our array.
$view->result = $new_results;
}
Esto es para ver los términos de taxonomía que están conectados a los nodos a través de una relación. Si solo tiene una vista de los nodos, su kilometraje puede variar.
Aunque evita la visualización de más de 3 por término, esto no impedirá que la consulta devuelva todos los resultados de cada término, por lo que no mejora el rendimiento de SQL en absoluto. Si tiene una gran cantidad de resultados para cada término, realice pantallas de panel de vista separadas y colóquelas todas en una región utilizando algo como CTools Page Manager para que no esté ejecutando grandes consultas.
Como siempre, querrás almacenar en caché estas cosas en producción.