SELECT查询,用于检查没有输入的重复项


SELECT query for checking duplicates without input

这是我第一次使用没有输入的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副本的结果。还是我错了?

谢谢。

如果定义为具有相同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
}

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

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

SELECT FIELD_A, FIELD_B, FIELD_C, COUNT(*)
    FROM MY_TABLE
    GROUP BY FIELD_A, FIELD_B, FIELD_C
    HAVING COUNT(*) > 1;