忏悔:一个 mysql newb 需要简单的例子来定位有点大的表中的重复行。我已经搜索并阅读了许多具有类似标题的其他主题,但是这些示例非常复杂,以至于我无法将它们应用于我的基本情况。
一个 MySQL 表只有 5 个字段,但有数百行。我希望找到重复的行——我知道肯定有一个,想知道是否还有其他行。
示例行:(rel_id 是自动递增的,主键字段)
'rel_id' => 1
'host' => 17
'host_type' => 'client'
'rep' => 7
'rep_type => 'cli_mgr'
我的方法是:
1. 将整个表读入 mysql 查询
2. 逐行比较 4 个数据字段与之前(“完成”)行的那些
3. 比较“新”行后,将其附加到数组“完成”行
这是我尝试过的。我确信必须有一个更简单的解决方案。您会看到我在尝试将“新”行附加到“完成”行数组时陷入困境:
$rRels = mysql_query("SELECT * FROM `rels`");
$a = array();
$e = array();
$c1 = 0;
$c2 = 0;
While ($r = mysql_fetch_assoc($rRels)) {
$i = $r['rel_id'];
$h = $r['host'];
$ht = $r['host_type'];
$r = $r['rep'];
$rt = $r['rep_type'];
foreach($a as $row) {
$xh = $row['host'];
$xht = $row['host_type'];
$xr = $row['rel'];
$xrt = $row['rel_type'];
if (($h==$xh) && ($ht==$xht) && ($r==$xr) && ($rt==$xrt)) {
echo 'Found one<br>';
$e[] = $r;
}
$c2++;
}
$a = array_merge(array('rel_id'=>$i, 'host'=>$h, 'host_type'=>$ht, 'rep'=>$r, 'rep_type'=>$rt), $a);
$c1++;
}
echo '<h3>Duplicate Rows:</h3>';
foreach ($e as $row) {
print_r($row);
echo '<br>';
}
echo '<br><br>';
echo 'Counter 1: ' . $c1 . '<br>';
echo 'Counter 2: ' . $c2 . '<br>';