1

这是我的表结构,

在此处输入图像描述

我尝试运行查询

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

我认为是给我正确的结果,但是有问题用 php 列出结果并制作删除按钮来删除重复的行之一

我在 php 中得到结果

内容 ID -利基 ID - TotalCount
208 - 2 - 2
210 - 32 - 3

但结果应该是

内容 ID -利基 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>";
}
4

3 回答 3

2

GROUP BY在这种情况下,将折叠您正在分组的字段上的结果content- 因此您只能看到两个结果。

如果您想保留该GROUP BY技术,您还可以使用为给定值GROUP_CONCAT(niche)提取每个逗号分隔的列表:nichecontent

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

然后,您可以使用 PHPexplode(',', $row['niche'])获取每个不同的值,然后使用这些值来确定要删除的值。

foreach($array as $row) {
    $niches = explode(',', $row['niche']);
    foreach ($niches as $niche) {
        echo $row['content'] . " - " . $niche . " - " . $row['TotalCount'] . "<br />";
    }
}
于 2013-07-20T13:25:38.150 回答
1

我认为这就是您要的,所有重复的行(带有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

一个用于测试的 SQLfiddle

于 2013-07-20T13:33:48.410 回答
0

在 sql 中进行以下更改:

$sql = mysql_query("SELECT content,niche, COUNT(content) TotalCount FROM table_name HAVING COUNT(content)>=2");
于 2013-07-20T13:25:48.737 回答