0

这是我第一次SELECT在没有输入的情况下使用查询。我想检查一个表是否有重复项。结果,我只需要计算结果。

所以我有这个:

SELECT 
       `field a`, `field b`, `field c` 
FROM 
        table 
WHERE 
        `a` AND `b` AND `c` 
GROUP BY
    duplicates
HAVING
    COUNT(duplicates) > 1

当结构如下时,这是否会检查表中的重复项:

field a |  field b  | field c
  a          b          c
  a          b          c
  d          e          f

我怎样才能得到结果?它只是num_rows还是我从查询中得到一个整数作为结果?

通常我用num_rows这样的方式从查询中获取结果:

$query = $db->query("SELECT ...");
$result = $query->num_rows;
if ($result !== 0 ){do something}

和结果之间通常应该存在差异,num_rows因为如果我要使用num_rows它来计数,它将返回2,因为 2 具有条件a AND b AND c,所以我认为上面的查询将1作为1找到重复项的结果返回。还是我错了?

非常感谢。

4

2 回答 2

2

如果将具有相同 A、B 和 C 的两条记录定义为重复,则可以使用如下查询:

SELECT A, B, C, COUNT(*) counter
FROM `MYTABLE`
GROUP BY A,B,C
HAVING COUNT(*) > 1

考虑到您的表格中有 3 个项目,例如您的问题,您的结果将是:

 A  |  B  |  C  | counter
 ---+-----+-----+--------
'a' | 'b' | 'c' | 2

在 PHP 中获取结果:

while ($row = mysql_fetch_assoc($result)) {
    $a = $row['A'];
    $b = $row['B'];
    $c = $row['C'];
    $counter = $row['counter'];
    // Do something with your values
}

请考虑使用 mysqli 或 PDO。一个好的起点:mysqli 或 PDO

于 2013-04-16T07:43:27.090 回答
1

我不确定我是否完全理解这个问题,但是如果您想显示值和计数,其中存在多行且所有三个字段的值相同,您可能需要类似...

SELECT FIELD_A, FIELD_B, FIELD_C, COUNT(*)
    FROM MY_TABLE
    GROUP BY FIELD_A, FIELD_B, FIELD_C
    HAVING COUNT(*) > 1;
于 2013-04-16T07:45:27.393 回答