Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL-三表标记结构-高效地从查询中获取标记名和计数_Php_Mysql_Sql_Tags - Fatal编程技术网

Php MySQL-三表标记结构-高效地从查询中获取标记名和计数

Php MySQL-三表标记结构-高效地从查询中获取标记名和计数,php,mysql,sql,tags,Php,Mysql,Sql,Tags,我有一个非常标准的3表标记模式,其中有一个名为content的表,其中包含title、subtitle、text等字段;一个名为tag的表,其中包含id和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

我有一个非常标准的3表标记模式,其中有一个名为content的表,其中包含title、subtitle、text等字段;一个名为tag的表,其中包含id和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
此查询选择同时具有标记“金属接头”和“接头集”(也包含“%Te”)的所有内容。它运行良好,不是我的问题

我的问题是如何高效地从这个查询中获取所有标记名及其计数。我在语句中的WHERE子查询中尝试了这一点,但它们需要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