首页 文章

从表中查找重复的行/记录

提问于
浏览
1

这是我的表结构,

enter image description here

我尝试运行查询

$sql = mysql_query("SELECT content,niche, COUNT(content) TotalCount FROM table_name GROUP by content HAVING COUNT(content)>=2");

我认为是给我corect结果,但有问题列出结果用PHP和删除按钮删除重复行之一

我得到PHP的结果

Content ID - Niche ID - TotalCount
208 - 2 - 2
210 - 32 - 3

但结果应该是

Content ID - Niche ID - TotalCount
208 - 2 - 2
208 - 2 - 2
210 - 32 - 3
210 - 32 - 3
210 - 32 - 3

即时通过PHP尝试结果显示

while($row = mysql_fetch_assoc($sql)) {            
    $array[] = $row;
}
foreach($array as $row) {
    echo $row['content']." - ".$row['niche']." - ".$row['TotalCount']."<br>";
}

3 回答

  • 2

    我认为这就是你要求的,所有重复的行(带有row_id)以及重复的次数;

    SELECT a.row_id, a.content, a.niche, cnt
    FROM table_name a
    JOIN (
      SELECT MIN(row_id) m, COUNT(*) cnt, niche,content
      FROM table_name
      GROUP BY content,niche
      HAVING COUNT(*)>1
    ) b
      ON a.niche=b.niche
     AND a.content=b.content
    

    An SQLfiddle to test with .

  • 0

    GROUP BY 将折叠您正在分组的字段上的结果,在本例中为 content - 因此您只能看到两个结果 .

    如果你想保留 GROUP BY 技术,你也可以使用 GROUP_CONCAT(niche) 为给定的 content 值拉取每个 niche 的逗号分隔列表:

    SELECT
        content,
        GROUP_CONCAT(niche) AS niche,
        COUNT(content) TotalCount
    FROM
        table_name
    GROUP BY
        content
    HAVING
        COUNT(content)>=2;
    

    然后,您可以使用PHP的 explode(',', $row['niche']) 获取每个不同的值,然后使用它们来确定要删除的值 .

    foreach($array as $row) {
        $niches = explode(',', $row['niche']);
        foreach ($niches as $niche) {
            echo $row['content'] . " - " . $niche . " - " . $row['TotalCount'] . "
    "; } }
  • 1

    在sql中进行以下更改:

    $sql = mysql_query("SELECT content,niche, COUNT(content) TotalCount FROM table_name HAVING COUNT(content)>=2");
    

相关问题