Php 获取行并检查是否具有相同的值

Php 获取行并检查是否具有相同的值,php,mysql,compare,fetch,Php,Mysql,Compare,Fetch,我对编码和学习PHP和MYSQL非常陌生。我想做的是,在同一个表中分组相同的CustomerID查询,同时进行回显。目前,我的代码回显所有分开的查询。我有一张像这样的桌子 ID CustomerID DATE Company 1 1 2018-11-19 A 2 1 2018-11-19 A 3 2 2018-11-19 B 4

我对编码和学习PHP和MYSQL非常陌生。我想做的是,在同一个表中分组相同的CustomerID查询,同时进行回显。目前,我的代码回显所有分开的查询。我有一张像这样的桌子

ID      CustomerID     DATE        Company
1           1       2018-11-19        A
2           1       2018-11-19        A
3           2       2018-11-19        B
4           3       2018-11-19        C
5           4       2018-11-19        D
6           4       2018-11-19        D
我的代码

$query = "SELECT `customers`.ID, `customers`.customerid, `customers`.date
        FROM `customers` WHERE month(DATE)= month(CURRENT_DATE()) AND YEAR(DATE) = YEAR(CURRENT_DATE());

$result = $mysqli->query($query);

while($resultquery = $result->fetch_array())

{
$queryresult[] = $resultquery;

}
if (!empty($queryresult)) {

foreach($queryresult as $queryresults)
{

$id = $queryresults['id'];
$customerid = $queryresults['customerid'];  
$date = $queryresults['date'];
?>
然后我回显它,结果是

Company Name: A
ID CustomerID DATE
1      1    2018-11-19

Company Name: A
ID CustomerID DATE
2      1    2018-11-19

Company Name: B
ID CustomerID DATE
3      2    2018-11-19

Company Name: C
ID CustomerID DATE
4      3    2018-11-19

<?php }} ?>

我用GROUP_CONCAT进行了一个sql查询,并使用分隔符“|”)对结果进行了分组,它可以工作,但我认为这不是最好的方法,所以请帮助。谢谢

将数据映射到键值数组中,并将公司作为键(包括查询中的公司:

$query=“选择
客户
.ID,
客户
.customerid,
客户
。日期,公司 从
客户
中,月(日期)=月(当前日期())和年(日期)=年(当前日期())”

然后使用键对项目进行分组以简化数据收集:

$result = $mysqli->query($query);
$queryresult = [];
while($resultquery = $result->fetch_array())

{
 $company = $resultquery['company'];
 if (array_key_exists($company,$queryresult){
   @$queryresult[$company] = [];
 }
 @$queryresult[$company][] = $resultquery;

}
然后,您可以使用foreach显示信息:

foreach($queryresult as $company => $items){
   // header by company
   echo "Company Name: $company \n";
   echo "ID CustomerID DATE\n";
   foreach($items as $item){
     // items in company
     echo "{$item['id']} {$item['customerid']} {$item['date']}\n"; 
  }

}

您的查询包含语法错误;缺少结束引号。这只是错误的粘贴吗?您可以基于
customerid
,即
$queryresult[$resultquery['customerid'][]将结果存储在数组中=$resultquery;
。然后您可以循环这些内容来创建groups@FunkFortyNiner是的。我的文件中有结束语。@Sean你能重新编写我的代码并解释一下吗?我不知道如何精确循环并从中获取数据。谢谢你,我没有看到你的任何代码超过
foreach($queryresult as$queryresults){
,因此我不知道如何重新编写代码。我不知道
公司名称:A
是从哪里来的感谢您的帮助,但我得到了错误;警告:report.php第54行$queryresult[$resultquery['group'][=$resultquery;您可以添加@at
@$queryresult[$Company][]=$resultquery;
以避免此警告。这是因为您正在为每个组创建一个新的不存在的密钥。否则,您可以执行密钥检查。我更新了示例代码。该代码现在可以工作。虽然它没有对公司进行分组,但我在实现时犯了一个错误。它不会显示同一公司的第二个查询。应该有5个记录d输出,2 A公司,1 B,2 C,1 d,但其类似于A1 B1 C1 D1I,如果(数组_key_存在($company,$queryresult)){@$queryresult[$company]=[];如果(数组_key_存在($customerid,$queryresult)){@$queryresult[$customerid]=[];它现在可以工作了。非常感谢!
$result = $mysqli->query($query);
$queryresult = [];
while($resultquery = $result->fetch_array())

{
 $company = $resultquery['company'];
 if (array_key_exists($company,$queryresult){
   @$queryresult[$company] = [];
 }
 @$queryresult[$company][] = $resultquery;

}
foreach($queryresult as $company => $items){
   // header by company
   echo "Company Name: $company \n";
   echo "ID CustomerID DATE\n";
   foreach($items as $item){
     // items in company
     echo "{$item['id']} {$item['customerid']} {$item['date']}\n"; 
  }

}