PHP 比较两个 while 循环的结果

标签 php mysql

我有以下疑问:

$state = get['state'];

$getPossibleIDs = "SELECT * FROM ".$report_group_lookup;
     $qPossibleID = $conn->prepare($getPossibleIDs);
          $qPossibleID -> execute();
               while($rowPossible = $qPossibleID->fetch())
                    {
                         $possibleID = $rowPossible['id'];
                         $possibleName = $rowPossible['name'];
$getSpecificIDs = "SELECT * FROM rbs_report_type_2_specific WHERE rbs_report_type_id =".$state;
     $qSpecifcID = $conn -> prepare($getSpecificIDs);
          $qSpecifcID -> execute();
               while($rowSpecfics = $qSpecifcID->fetch())
                    {
                         $specificIDs = $rowSpecfics['rbs_specific_id'];

                         if($possibleID == $specificIDs)
                              {
                                   echo $possibleName."-Yes<br/>";
                              }
                         else
                              {
                                   echo $possibleName."-No<br/>";
                              }
                    }
}

我想做的是比较两个 while 查找的结果,第一个查找 getPossibleIDs 找到该语句可以查看的所有可能的 ID。第二个 getSpecificIDs 仅查找之前已选择的ID。

它几乎可以工作,但是第二个查询查看包含以下信息的表:

------------------------------------
|rbs_report_type_id|rbs_specific_id|
| 1                | 1             |
| 1                | 2             |
| 1                | 3             |

所以我得到的结果重复了三次,每个 rbs_spefic_id 一次:

HDD Coordinator-No
HDD Coordinator-No
HDD Coordinator-No
Rig Manager-Yes
Rig Manager-No
Rig Manager-No
Driller-No
Driller-Yes
Driller-No
Tank Hand-No
Tank Hand-No
Tank Hand-Yes

而不是:

HDD Coordinator-No
Rig Manager-Yes
Driller-Yes
Tank Hand-Yes

关于如何相应地更改输出有什么建议吗?

谢谢

最佳答案

不要执行内部循环,而是使用 JOIN 查询在第一个查询中完成所有操作

$getPossibleIDs = "
    SELECT rgl.id, rgl.name, 
    CASE WHEN rrt2s.rbs_specific_id IS NOT NULL THEN 'Yes' ELSE 'NO' END as `match`
    FROM ".$report_group_lookup." rgl 
    LEFT JOIN rbs_report_type_2_specific rrt2s 
         ON rrt2s.rbs_specific_id = rgl.id 
         AND rrt2s.rbs_report_type_id = ?";
$qPossibleID = $conn->prepare($getPossibleIDs);
$qPossibleID -> execute(array($state));
while($rowPossible = $qPossibleID->fetch())
     {
      echo $rowPossible['name']. " -".$rowPossible['match']."<br />";
     }

关于PHP 比较两个 while 循环的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24638447/

相关文章:

php - PHP 中的 Azure 身份验证错误

php - 使用 PDO 获取最后插入的行 ID(不合适的结果)

php - 限制文本区域的保留换行符

mysql - 如何不返回行

php - 将数据从一个列添加到另一个表的列 Laravel 5.2

php - 最高效的客户对客户聊天系统

php - INSERT INTO 表不起作用?

php - Magento:从数据库中选择

MYSQL - 多表连接和SUM

javascript - 如何循环遍历mysql数据库中的消息并正确显示它们