我有一个页面,检查是否已提交Meta标签的产品和类别。
它显示在顶部,那些缺失的。但我也需要看看是否有任何复制-因为你不应该真的有两个产品具有相同的标题标签或元描述。
我已经通过提取所有产品标题标签和Meta Desc/Keywords以及它们的标题来做到这一点。但从理论上讲,这比几百个产品需要更多的工作,而我只想找到那些标题标签,Meta Desc或Meta Keywords至少与另一个重复的产品。
我如何做到这一点,而不运行查询找到所有。然后在每一行上,再次查询ALL以检查titletag,然后查询ALL以检查Meta Desc,然后再次查询ALL以检查Keywords。
是否有一个脚本,我可以查询一个产品,并询问这三个字段中的任何一个是否在数据库的其他地方有重复,没有四个查询(三个被嵌入)?
如果您想要排除任何重复的行,一种方法就是按这三个值分组并确保HAVING COUNT(*) = 1
。这样做的缺点是,它通常不能以其他方式工作,因为如果按三列分组并且它们重复,则将从另一行任意选择剩余的列。
但是,如果这不是一个风险,并且您只想选择这三个值出现一次的行,您可以尝试:
SELECT *
FROM myTable
GROUP BY col1, col2, col3
HAVING COUNT(*) = 1;
我会把@McAdam331的答案翻倍,稍微修改一下。
如果您需要包含多行(col1,col2,col3)
-元组:
select col1, col2, col3, group_concat(id) as idlist, count(*) as anz
from mytable
group by col1, col2, col3
having anz > 1
在group_concat(id)中,您将获得所有id作为逗号分隔的列表,如(4,1,19)。