这是我的表结构,
我尝试运行查询
$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>";
}
答案 0 :(得分:2)
GROUP BY
会合并您正在分组的字段上的结果,在这种情况下为content
- 因此您只能看到两个结果。
如果您想保留GROUP BY
技术,还可以使用GROUP_CONCAT(niche)
为给定的niche
值提取逗号分隔的每个content
列表:< / p>
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'] . "<br />";
}
}
答案 1 :(得分: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
答案 2 :(得分:0)
在sql中进行以下更改:
$sql = mysql_query("SELECT content,niche, COUNT(content) TotalCount FROM table_name HAVING COUNT(content)>=2");