Привет, парни!
У сайта 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 уже ничего не поможет... Но куда копать по поводу дубликатов?
Понял.
Вот запрос к базе:
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. Дублей нет. Но как решить эту проблему? Хочется видеть в каталоге и звёздочки.