Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计数重复记录,同时能够在PHP和MYSQL中打印其他数据?_Php_Mysql_Mysqli - Fatal编程技术网

如何计数重复记录,同时能够在PHP和MYSQL中打印其他数据?

如何计数重复记录,同时能够在PHP和MYSQL中打印其他数据?,php,mysql,mysqli,Php,Mysql,Mysqli,我的logtrama表中有以下记录: id_logtrama fechaHora idCliente idEquipo 1 2021-04-18 20 8 2 2021-04-18 20 8 3 2021-04-18 20 8 4 2021-04-18 20

我的
logtrama
表中有以下记录:

id_logtrama    fechaHora    idCliente    idEquipo
    1          2021-04-18       20          8
    2          2021-04-18       20          8
    3          2021-04-18       20          8
    4          2021-04-18       20          1
    5          2021-04-18       4           4
并且,在我的
equipo
表格中:

idEquipo    idCliente     tipo
    1          20        Alarm1
    2          1         Alarm2
    3          2         Alarm3
    8          20        Alarm4
现在,通过我的查询,我打印符合给定条件的结果:

$stmt = $con->prepare("SELECT l.id_logtrama,
                                    l.fechaHora,
                                    l.idCliente,
                                    l.idEquipo,
                                    l.statusGlobal
                                FROM logtrama l
                                INNER JOIN equipo e ON l.idEquipo=e.idEquipo AND l.idCliente=e.idCliente
                                WHERE DATE(fechaHora)=? GROUP BY l.id_logtrama");
$stmt->bind_param("s", $date_day);
$stmt->execute();
$stmt->store_result();

if ($stmt->num_rows > 0) {
    $stmt->bind_result(
        $id_logtrama,
        $fechaHora,
        $pag_idCliente,
        $pag_idEquipo,
        $statusGlobal
    );
    
    while ($stmt->fetch()) {
        //print_r(expression)
    }
}
换句话说,它将打印以下结果:

    1          2021-04-18       20          8
    2          2021-04-18       20          8
    3          2021-04-18       20          8
    4          2021-04-18       20          1
因为它是唯一与两个表的并集相匹配的数据

但现在我需要的是能够在同一查询中统计重复记录,以便打印数据,总之,我希望实现最后输入的数据的以下打印,但要使用其各自的计数:

    ID: 3    Date: 2021-04-18   ID Customer: 20     Id Team: 8   Total repeated records: (3)
    ID: 4    Date: 2021-04-18   ID Customer: 20     ID team: 1   Total repeated records: (1)
我怎样才能得到那个结果?您能否向我解释一下我可以向查询添加哪些其他条件,可能是
COUNT(*)
SUM
,以及我必须如何添加此条件才能获得所需的结果


谢谢

我不完全确定您想要实现什么,但据我所知,您并不真的需要加入,因为您的
选择
字段都来自一个表。在上面的例子中,它确实将记录限制在
eqipo
中有关联字段的记录中,但我假设您只是根据每个客户进行选择,因此将添加一个
where
子句来实现这一效果。。。如果不是这样,那么您可以简单地将
内部连接
子句添加回,并删除附加的
WHERE
子句


您试图做的是将字段聚合在一起。根据您的数据和意图,您可以通过几种方式来实现这一点

从外观上看,除了
id\u logtrama
之外,所有字段都是相同的,这意味着我们可以简单地将它们添加到查询的
GROUP BY
子句中:

GROUP BY idEquipo, fechaHora, idCliente
我假设(从您的示例中)您也想
选择最高的
id\u logtrama
?为此,我们可以使用
MAX
聚合功能:

SELECT MAX(id_logtrama) as id
然后,您当然需要添加
WHERE
orderby
子句,这样您就可以:

SELECT MAX(id_logtrama) as id,
    fechaHora as date,
    idCliente as customer,
    idEquipo as team,
    COUNT(*) as count
FROM logtrama
WHERE fechaHora   = ?
    AND idCliente = ?
GROUP BY idEquipo, fechaHora, idCliente
ORDER BY id
代码:

$sql = "
    SELECT MAX(id_logtrama) as id,
        fechaHora as date,
        idCliente as customer,
        idEquipo as team,
        COUNT(*) as count
    FROM logtrama
    WHERE fechaHora   = ?
        AND idCliente = ?
    GROUP BY idEquipo, fechaHora, idCliente
    ORDER BY id
";

$query = $con->prepare($sql);
$query->bind_param("si", $date_day, $client_id);
$query->execute();
$query->store_result();

$query->bind_result($id, $date, $customer, $team, $count);

while ($query->fetch()) {
    echo "ID: {$id}, DATE: {$date}, CustomerID: {$customer}, TeamID: {$team}, Total: $count", PHP_EOL;
}

…或者类似的东西,朋友,但是你没有检查
logtrama
表的
idCliente
idEquipo
是否与'equipo'表的
idCliente
idEquipo
匹配。我能传递的唯一条件是日期,而不是
idCliente
或其他数据,因为在数据库中注册的数据是通过
Arduino
的,所以我需要的是,当执行
Arduino
发送的数据时,然后通过邮件发送我想要打印的信息,这就是为什么我不能将
idCliente
放在
的位置,每天只需发送报告。@Valentina如上(第一段)所述,如果您需要,您只需添加原始的
JOIN
。。。?这不是这么说的吗?对不起,我仍然不知道这不能解决问题的哪一部分。
SELECT a.id_logtrama 
     , a.fechaHora  
     , a.idCliente 
     , a.idEquipo 
     , b.tipo 
     , c.totals
  FROM logtrama a
  JOIN equipo b
    ON b.idequipo = a.idequipo
   AND b.idCliente = a.idCliente
  JOIN
     ( SELECT MAX(t.id_logtrama) id_logtrama
            , COUNT(*) totals
         FROM logtrama t
         JOIN equipo e
           ON e.idequipo = t.idequipo
          AND e.idCliente = t.idCliente
        GROUP
           BY t.idcliente
            , t.idequipo
     ) c
    ON c.id_logtrama = a.id_logtrama;