1

我有一个非常标准的 3 表标记架构,其中我有一个以content字段命名的表,例如title, subtitle,text等,一个以tag字段命名的表idand name,以及一个名为content_tag将两者与字段content_id和连接起来的表tag_id

我允许用户通过标签和关键字进行搜索。对此的查询如下所示:

SELECT *
FROM content_tag ct, content c, tag t 
WHERE ct.tag_id = t.id 
 AND (t.name IN ('Metal Joints','Joint Set'))
 AND c.id = ct.content_id 
 AND (c.title like '%Te%' or c.subtitle like '%Te%' or c.text like '%Te%' or c.keywords like '%Te%' ) 
GROUP BY c.id HAVING COUNT( c.id )=2 
ORDER BY add_date DESC

此查询选择同时具有标签“ Metal Joints”和“ ”且Joint Set还包含“ %Te”的所有内容。它运作良好,不是我的问题。

我的问题是尝试有效地从此查询中获取所有标签名称及其计数。我用子查询WHERE IN语句尝试了这个,但它们需要 3-5 秒才能完成。

我需要帮助创建一个查询,该查询将为我提供上述查询生成的表中包含的标签名称和计数列表。如果不花太长时间,我似乎无法做到。

编辑:这是我现在使用的查询,需要几秒钟,但有效。

SELECT tag.name, COUNT(tag.id) as tagCount
FROM content_tag
LEFT JOIN tag
ON content_tag.tag_id = tag.id
WHERE content_tag.content_id IN
(SELECT c.id
FROM content_tag ct, content c, tag t 
WHERE ct.tag_id = t.id 
 AND (t.name IN ('Metal Joints','Joint Set'))
 AND c.id = ct.content_id 
 AND (c.title like '%Te%' or c.subtitle like '%Te%' or c.text like '%Te%' or c.keywords like '%Te%' ) 
GROUP BY c.id HAVING COUNT( c.id )=2 
ORDER BY add_date DESC)
GROUP BY tag.id
4

0 回答 0