如何在不查询整个数据库的情况下检查重复的条目?

时间:2015-09-18 16:01:40

标签: php mysql duplicates

我有一个页面,用于检查是否已针对产品和类别提交元标记。

它显示在顶部,那些缺失。 但是我还需要看看是否有任何重复 - 因为你不应该有两个具有相同Titletag或Meta Description的产品。

我已经通过提取所有产品Titletags和Meta Desc / Keywords及其标题来实现。但从理论上讲,这需要花费更多的工作而不是需要超过数百种产品,而我只是想找到那些标题标签,元描述或元关键字与至少另外一个重复的那些。

如何在不运行查询的情况下执行此操作。然后在每一行上,再次查询ALL以检查titletag,然后查询所有以检查Meta Desc,然后再次查询所有以检查关键字。

是否有可以查询产品的脚本,并询问这三个字段中的任何一个是否在数据库中的其他位置都有重复项,没有四个查询(三个是嵌入式的)?

2 个答案:

答案 0 :(得分:1)

如果要排除任何重复的行,一种方法是将这三个值分组,并确保HAVING COUNT(*) = 1。这种情况的缺点是它通常不会以任何其他方式工作,因为如果按三列分组并重复,则剩余的列将从另一行中任意选择。

但是,如果这不是风险,而您只想选择这三个值出现一次的行,您可以尝试这样做:

SELECT *
FROM myTable
GROUP BY col1, col2, col3
HAVING COUNT(*) = 1;

答案 1 :(得分:0)

我会将@ 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)。