Привет, парни!
У сайта ru.winamp.com возникла одна небольшая проблема: по какой-то причине у некоторых нод в Views появились дубликаты. Хочу заметить, что дубликаты не у всех нод, а лишь у некоторых: у одних их по пять, а у других — по одному.
Раньше их не было. Я не знаю, почему они могли появиться. Distinct помогает, но вьюшка после этого генерируется секунд 50-60. Раньше и без Distinct обходились, и не было дубликатов.
К примеру, возьмем обложку Ace Attorney Investigations (http://ru.winamp.com/skin/ace-attorney-investigations/6805). В каталоге она дублируется пять раз (http://ru.winamp.com/skins). Даже если задать ей только один словарь (категорию), она всё равно будет дублироваться пять раз.
Дубликаты появились во всех вьюшках (плагины, визуализации, скины).
Куда копать, ребята? Аж руки уже опустились и даже возникло желание закрыть сайт ru.winamp.com из-за безвыходности из этой ситуации.
Спасибо за помощь, парни!
Комментарии
Хорошая попытка.
Но это ему не поможет.
Понятное дело, что Winamp уже ничего не поможет... Но куда копать по поводу дубликатов?![Sad](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/sad.gif)
Понял.
Вот запрос к базе:
SELECT files.fid AS fid, node_node_data_field_file.title AS node_node_data_field_file_title, node_node_data_field_file.nid AS node_node_data_field_file_nid, node_node_data_field_file_node_data_field_image.field_image_fid AS node_node_data_field_file_node_data_field_image_field_image_fid, node_node_data_field_file_node_data_field_image.field_image_list AS node_node_data_field_file_node_data_field_image_field_image_list, node_node_data_field_file_node_data_field_image.field_image_data AS node_node_data_field_file_node_data_field_image_field_image_data, node_node_data_field_file.type AS node_node_data_field_file_type, node_node_data_field_file.vid AS node_node_data_field_file_vid, node_node_data_field_file.created AS node_node_data_field_file_created, (SELECT COUNT(dc.fid) FROM download_count dc WHERE dc.fid = files.fid) AS files_downloads, votingapi_cache_node_node_data_field_file_vote_average.value AS votingapi_cache_node_node_data_field_file_vote_average_value, node_node_data_field_file_node_data_field_description.field_description_value AS node_node_data_field_file_node_data_field_description_field_description_value, node_node_data_field_file_node_data_field_description.field_description_format AS node_node_data_field_file_node_data_field_description_field_description_format FROM files files LEFT JOIN content_field_file node_data_field_file ON files.fid = node_data_field_file.field_file_fid INNER JOIN node node_node_data_field_file ON node_data_field_file.vid = node_node_data_field_file.vid LEFT JOIN votingapi_cache votingapi_cache_node_node_data_field_file_vote_average ON node_node_data_field_file.nid = votingapi_cache_node_node_data_field_file_vote_average.content_id AND (votingapi_cache_node_node_data_field_file_vote_average.content_type = 'node' AND votingapi_cache_node_node_data_field_file_vote_average.tag = 'vote' AND votingapi_cache_node_node_data_field_file_vote_average.function = 'average') LEFT JOIN content_field_image node_node_data_field_file_node_data_field_image ON node_node_data_field_file.vid = node_node_data_field_file_node_data_field_image.vid LEFT JOIN content_field_description node_node_data_field_file_node_data_field_description ON node_node_data_field_file.vid = node_node_data_field_file_node_data_field_description.vid WHERE node_node_data_field_file.type IN ('skins') ORDER BY files_downloads DESC
Вот настройки вьюхи (надеюсь, то вставил):
$view->name = 'download2';
$view->description = '';
$view->tag = '';
$view->base_table = 'files';
$view->core = 0;
$view->api_version = '2';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
$handler = $view->new_display('default', 'Defaults', 'default');
$handler->override_option('relationships', array(
'vid' => array(
'label' => 'Файл',
'required' => 1,
'id' => 'vid',
'table' => 'node_data_field_file',
'field' => 'vid',
'override' => array(
'button' => 'Override',
),
'relationship' => 'none',
),
'votingapi_cache' => array(
'label' => 'Vote results',
'required' => 0,
'votingapi' => array(
'value_type' => '',
'tag' => 'vote',
'function' => 'average',
),
'id' => 'votingapi_cache',
'table' => 'node',
'field' => 'votingapi_cache',
'relationship' => 'vid',
),
));
$handler->override_option('fields', array(
'title' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 1,
'max_length' => '30',
'word_boundary' => 1,
'ellipsis' => 1,
'html' => 0,
'strip_tags' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'link_to_node' => 1,
'exclude' => 0,
'id' => 'title',
'table' => 'node',
'field' => 'title',
'relationship' => 'vid',
'override' => array(
'button' => 'Override',
),
),
'field_image_fid' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'html' => 0,
'strip_tags' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'link_to_node' => 0,
'label_type' => 'none',
'format' => 'image_plain',
'multiple' => array(
'group' => 1,
'multiple_number' => '1',
'multiple_from' => '',
'multiple_reversed' => 0,
),
'exclude' => 0,
'id' => 'field_image_fid',
'table' => 'node_data_field_image',
'field' => 'field_image_fid',
'override' => array(
'button' => 'Override',
),
'relationship' => 'vid',
),
'created' => array(
'label' => 'Опубликовано',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'html' => 0,
'strip_tags' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'date_format' => 'custom',
'custom_date_format' => 'd.m.Y',
'exclude' => 0,
'id' => 'created',
'table' => 'node',
'field' => 'created',
'relationship' => 'vid',
),
'downloads' => array(
'label' => 'Количество загрузок',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'absolute' => 0,
'link_class' => '',
'alt' => '',
'rel' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'html' => 0,
'strip_tags' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'hide_alter_empty' => 0,
'set_precision' => FALSE,
'precision' => 0,
'decimal' => '.',
'separator' => ',',
'format_plural' => 0,
'format_plural_singular' => '1',
'format_plural_plural' => '@count',
'prefix' => '',
'suffix' => '',
'exclude' => 0,
'id' => 'downloads',
'table' => 'files',
'field' => 'downloads',
'override' => array(
'button' => 'Override',
),
'relationship' => 'none',
),
'value' => array(
'label' => 'Общая оценка',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'absolute' => 0,
'link_class' => '',
'alt' => '',
'rel' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'html' => 0,
'strip_tags' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'hide_alter_empty' => 1,
'set_precision' => 0,
'precision' => '0',
'decimal' => '.',
'separator' => ',',
'format_plural' => 0,
'format_plural_singular' => '1',
'format_plural_plural' => '@count',
'prefix' => '',
'suffix' => '',
'appearance' => 'fivestar_views_value_display_handler',
'exclude' => 0,
'id' => 'value',
'table' => 'votingapi_cache',
'field' => 'value',
'relationship' => 'votingapi_cache',
),
'field_description_value' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'absolute' => 0,
'link_class' => '',
'alt' => '',
'rel' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 1,
'max_length' => '200',
'word_boundary' => 1,
'ellipsis' => 1,
'html' => 0,
'strip_tags' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'hide_alter_empty' => 1,
'link_to_node' => 0,
'label_type' => 'none',
'format' => 'plain',
'multiple' => array(
'group' => TRUE,
'multiple_number' => '',
'multiple_from' => '',
'multiple_reversed' => FALSE,
),
'exclude' => 0,
'id' => 'field_description_value',
'table' => 'node_data_field_description',
'field' => 'field_description_value',
'relationship' => 'vid',
'override' => array(
'button' => 'Override',
),
),
));
$handler->override_option('sorts', array(
'downloads' => array(
'order' => 'DESC',
'id' => 'downloads',
'table' => 'files',
'field' => 'downloads',
'relationship' => 'none',
),
));
$handler->override_option('filters', array(
'type' => array(
'operator' => 'in',
'value' => array(
'skins' => 'skins',
),
'group' => '0',
'exposed' => TRUE,
'expose' => array(
'use_operator' => 0,
'operator' => 'type_op',
'identifier' => 'type',
'label' => 'Материал: Тип',
'optional' => 1,
'single' => 1,
'remember' => 0,
'reduce' => 0,
),
'id' => 'type',
'table' => 'node',
'field' => 'type',
'relationship' => 'vid',
'override' => array(
'button' => 'Override',
),
),
'title' => array(
'operator' => 'word',
'value' => '',
'group' => '0',
'exposed' => TRUE,
'expose' => array(
'use_operator' => 0,
'operator' => 'title_op',
'identifier' => 'title',
'label' => '',
'optional' => 1,
'remember' => 0,
),
'case' => 1,
'id' => 'title',
'table' => 'node',
'field' => 'title',
'relationship' => 'vid',
),
'tid' => array(
'operator' => 'or',
'value' => array(
26 => '26',
19 => '19',
14 => '14',
15 => '15',
13 => '13',
20 => '20',
18 => '18',
16 => '16',
21 => '21',
22 => '22',
23 => '23',
24 => '24',
17 => '17',
25 => '25',
),
'group' => '0',
'exposed' => TRUE,
'expose' => array(
'use_operator' => 0,
'operator' => 'tid_op',
'identifier' => 'tid',
'label' => '',
'optional' => 1,
'single' => 1,
'remember' => 0,
'reduce' => 1,
),
'type' => 'select',
'limit' => TRUE,
'vid' => '3',
'id' => 'tid',
'table' => 'term_node',
'field' => 'tid',
'hierarchy' => 1,
'relationship' => 'vid',
'reduce_duplicates' => 1,
),
));
$handler->override_option('access', array(
'type' => 'none',
));
$handler->override_option('cache', array(
'type' => 'time',
'results_lifespan' => '21600',
'output_lifespan' => '21600',
));
$handler->override_option('title', 'Обложки (скины) для Winamp');
$handler->override_option('header_format', '1');
$handler->override_option('header_empty', 0);
$handler->override_option('empty', 'К сожалению, поиск не дал результатов. Попробуйте изменить параметры поиска.');
$handler->override_option('empty_format', '1');
$handler->override_option('items_per_page', 9);
$handler->override_option('use_pager', '1');
$handler->override_option('use_more', 0);
$handler->override_option('use_more_always', 0);
$handler->override_option('link_display', 'page_3');
$handler->override_option('distinct', 0);
$handler->override_option('style_plugin', 'grid');
$handler->override_option('style_options', array(
'grouping' => '',
'columns' => '3',
'alignment' => 'horizontal',
'fill_single_line' => 1,
));
$handler = $view->new_display('page', 'Top Download', 'page_1');
$handler->override_option('path', 'skins/download');
$handler->override_option('menu', array(
'type' => 'tab',
'title' => 'Лидеры загрузок',
'description' => 'Лидеры загрузок',
'weight' => '1',
'name' => 'navigation',
));
$handler->override_option('tab_options', array(
'type' => 'normal',
'title' => 'Лидеры загрузок',
'description' => '',
'weight' => '0',
'name' => 'primary-links',
));
$handler = $view->new_display('page', 'Top Rating', 'page_2');
$handler->override_option('sorts', array(
'value' => array(
'order' => 'DESC',
'id' => 'value',
'table' => 'votingapi_cache',
'field' => 'value',
'relationship' => 'votingapi_cache',
'override' => array(
'button' => 'Использовать установки по умолчанию',
),
),
));
$handler->override_option('path', 'skins/rating');
$handler->override_option('menu', array(
'type' => 'tab',
'title' => 'Лидеры рейтинга',
'description' => 'Лидеры рейтинга',
'weight' => '2',
'name' => 'navigation',
));
$handler->override_option('tab_options', array(
'type' => 'tab',
'title' => 'jfkdfjfh',
'description' => '',
'weight' => '0',
'name' => 'navigation',
));
$handler = $view->new_display('page', 'Date Added', 'page_3');
$handler->override_option('sorts', array(
'created' => array(
'order' => 'DESC',
'granularity' => 'second',
'id' => 'created',
'table' => 'node',
'field' => 'created',
'relationship' => 'vid',
'override' => array(
'button' => 'Use default',
),
),
));
$handler->override_option('path', 'skins/add');
$handler->override_option('menu', array(
'type' => 'default tab',
'title' => 'Недавно добавленные',
'description' => 'Недавно добавленные',
'weight' => '0',
'name' => 'navigation',
));
$handler->override_option('tab_options', array(
'type' => 'normal',
'title' => 'Недавно добавленные',
'description' => 'Недавно добавленные',
'weight' => '0',
'name' => 'primary-links',
));
$handler = $view->new_display('block', 'Block', 'block_1');
$handler->override_option('filters', array(
'type' => array(
'operator' => 'in',
'value' => array(
'skins' => 'skins',
),
'group' => '0',
'exposed' => FALSE,
'expose' => array(
'operator' => FALSE,
'label' => '',
),
'id' => 'type',
'table' => 'node',
'field' => 'type',
'relationship' => 'vid',
'override' => array(
'button' => 'Override',
),
),
'title' => array(
'operator' => 'word',
'value' => '',
'group' => '0',
'exposed' => TRUE,
'expose' => array(
'use_operator' => 0,
'operator' => 'title_op',
'identifier' => 'title',
'label' => '',
'optional' => 1,
'remember' => 0,
),
'case' => 1,
'id' => 'title',
'table' => 'node',
'field' => 'title',
'relationship' => 'vid',
),
));
$handler->override_option('exposed_block', TRUE);
$handler->override_option('block_description', '');
$handler->override_option('block_caching', -1);
$handler = $view->new_display('block', 'Block - Обложки', 'block_2');
$handler->override_option('fields', array(
'title' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'target' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'html' => 0,
'strip_tags' => 0,
),
'empty' => '',
'hide_empty' => 0,
'empty_zero' => 0,
'link_to_node' => 1,
'exclude' => 0,
'id' => 'title',
'table' => 'node',
'field' => 'title',
'relationship' => 'vid',
'override' => array(
'button' => 'Override',
),
),
));
$handler->override_option('filters', array(
'type' => array(
'operator' => 'in',
'value' => array(
'skins' => 'skins',
),
'group' => '0',
'exposed' => FALSE,
'expose' => array(
'operator' => FALSE,
'label' => '',
),
'id' => 'type',
'table' => 'node',
'field' => 'type',
'relationship' => 'vid',
'override' => array(
'button' => 'Override',
),
),
));
$handler->override_option('title', 'Лидеры загрузок');
$handler->override_option('items_per_page', 5);
$handler->override_option('use_pager', '0');
$handler->override_option('style_plugin', 'default');
$handler->override_option('style_options', array());
$handler->override_option('block_description', '');
$handler->override_option('block_caching', -1);
$handler = $view->new_display('block', 'Блок', 'block_3');
$handler->override_option('sorts', array());
$handler->override_option('filters', array(
'type' => array(
'operator' => 'in',
'value' => array(
'skins' => 'skins',
),
'group' => '0',
'exposed' => FALSE,
'expose' => array(
'operator' => FALSE,
'label' => '',
),
'id' => 'type',
'table' => 'node',
'field' => 'type',
'relationship' => 'vid',
'override' => array(
'button' => 'Override',
),
),
'title' => array(
'operator' => 'word',
'value' => '',
'group' => '0',
'exposed' => TRUE,
'expose' => array(
'use_operator' => 0,
'operator' => 'title_op',
'identifier' => 'title',
'label' => '',
'optional' => 1,
'remember' => 0,
),
'case' => 1,
'id' => 'title',
'table' => 'node',
'field' => 'title',
'relationship' => 'vid',
),
));
$handler->override_option('exposed_block', TRUE);
$handler->override_option('block_description', '');
$handler->override_option('block_caching', -1);
$handler = $view->new_display('block', 'Блок', 'block_4');
$handler->override_option('sorts', array());
$handler->override_option('filters', array(
'type' => array(
'operator' => 'in',
'value' => array(
'skins' => 'skins',
),
'group' => '0',
'exposed' => FALSE,
'expose' => array(
'operator' => FALSE,
'label' => '',
),
'id' => 'type',
'table' => 'node',
'field' => 'type',
'relationship' => 'vid',
'override' => array(
'button' => 'Override',
),
),
'tid' => array(
'operator' => 'or',
'value' => array(
13 => '13',
14 => '14',
15 => '15',
16 => '16',
17 => '17',
18 => '18',
19 => '19',
20 => '20',
21 => '21',
22 => '22',
23 => '23',
26 => '26',
24 => '24',
25 => '25',
),
'group' => '0',
'exposed' => TRUE,
'expose' => array(
'use_operator' => 0,
'operator' => 'tid_op',
'identifier' => 'tid',
'label' => '',
'optional' => 1,
'single' => 1,
'remember' => 0,
'reduce' => 1,
),
'type' => 'select',
'limit' => TRUE,
'vid' => '3',
'id' => 'tid',
'table' => 'term_node',
'field' => 'tid',
'hierarchy' => 1,
'relationship' => 'vid',
'reduce_duplicates' => 1,
'override' => array(
'button' => 'Использовать установки по умолчанию',
),
),
));
$handler->override_option('exposed_block', TRUE);
$handler->override_option('block_description', '');
$handler->override_option('block_caching', -1);
Ребята, обратил внимание, что если вырубить Voting API, дубликаты исчезают... Тогда в какое русло копать?
Пока убрал Node: Vote results из Views. Дублей нет. Но как решить эту проблему? Хочется видеть в каталоге и звёздочки.![Beee](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/beee.gif)