私は以下のクエリを使用しますが、非常に遅いです。
SELECT `jc`.*
FROM `dbname`.`joomla_content` AS `jc`
INNER JOIN `dbname`.`joomla_contentitem_tag_map` AS `jctm0` ON `jc`.`id` = `jctm0`.`content_item_id` AND `jctm0`.`tag_id` = 5
INNER JOIN `dbname`.`joomla_contentitem_tag_map` AS `jctm1` ON `jc`.`id` = `jctm1`.`content_item_id` AND `jctm1`.`tag_id` = 9
ORDER BY `jc`.`id` ASC
クエリでさらにタグIDを選択すると、タグの速度が低下します。問題は、id_tagが5と9のすべてのコンテンツだけでなく、より多くのタグIDとこの2つを持つコンテンツも検索されることです。あなたは結果を反復してカウントしなければなりません。tot_tags result is =あなたの検索タグです。
また、joomlaプロジェクトで作業している場合は、JHelperTagsを使用してクエリを生成できます。あなたは、アレイ内の、その後、フィルタリングするすべてのタグIDを入れて:
このようなクエリを生成
$this->query = $tagsHelper->getTagItemsQuery($idTags, null, false, 'c.core_publish_up', 'DESC', false, 'all', '1');
$this->db->setQuery($this->query);
$results = $this->db->loadAssocList();
:
SELECT m.type_alias, m.content_item_id, m.core_content_id, count(m.tag_id) AS match_count, MAX(m.tag_date) as tag_date, MAX(c.core_title) AS core_title, MAX(c.core_params) AS core_params,MAX(c.core_alias) AS core_alias, MAX(c.core_body) AS core_body, MAX(c.core_state) AS core_state, MAX(c.core_access) AS core_access,MAX(c.core_metadata) AS core_metadata, MAX(c.core_created_user_id) AS core_created_user_id, MAX(c.core_created_by_alias) AS core_created_by_alias,MAX(c.core_created_time) as core_created_time, MAX(c.core_images) as core_images,CASE WHEN c.core_modified_time = '0000-00-00 00:00:00' THEN c.core_created_time ELSE c.core_modified_time END as core_modified_time,MAX(c.core_language) AS core_language, MAX(c.core_catid) AS core_catid,MAX(c.core_publish_up) AS core_publish_up, MAX(c.core_publish_down) as core_publish_down,MAX(ct.type_title) AS content_type_title, MAX(ct.router) AS router,CASE WHEN c.core_created_by_alias > ' ' THEN c.core_created_by_alias ELSE ua.name END AS author,ua.email AS author_email
FROM #__contentitem_tag_map AS m
INNER JOIN #__ucm_content AS c ON m.type_alias = c.core_type_alias AND m.core_content_id = c.core_content_id AND c.core_state IN (1) AND (c.core_publish_up = '0000-00-00 00:00:00' OR c.core_publish_up <= '2017-07-28 15:37:34') AND (c.core_publish_down = '0000-00-00 00:00:00' OR c.core_publish_down >= '2017-07-28 15:37:34')
INNER JOIN #__content_types AS ct ON ct.type_alias = m.type_alias
LEFT JOIN #__users AS ua ON ua.id = c.core_created_user_id
WHERE m.tag_id IN (8,83,85) AND m.type_alias IN ('com_content.article','com_contact.contact','com_newsfeeds.newsfeed','com_users.user','com_content.category','com_contact.category','com_newsfeeds.category','com_tags.tag','com_banners.banner','com_banners.category','com_banners.client','com_users.note','com_users.category','com_weblinks.weblink','com_weblinks.category') AND c.core_access IN (0,1)
GROUP BY m.type_alias, m.content_item_id, m.core_content_id
ORDER BY MAX(`c`.`core_publish_up`) DESC
あなたはフィルタデータ用much_count値を使用する場合は、あなたが見つけることができますon