Php 如何从由第三个表连接的两个mySQL表中选择数据?

Php 如何从由第三个表连接的两个mySQL表中选择数据?,php,mysql,Php,Mysql,这些是我的桌子: 项目: 订单: 产品: 我的目标是找出每个项目,如果所有的产品是“ok”。连接是orders表 这就是我的结果 CAT = SOME PENDING BIRD = ALL OK FROG = ALL OK 我有困难,这意味着我被困住了。我不知道如何连接这些表。我的做法: $pdo = $db->query('SELECT * (SELECT COUNT(*) FROM products WHER

这些是我的桌子:

项目:

订单:

产品:

我的目标是找出每个项目,如果所有的产品是“ok”。连接是orders表

这就是我的结果

  CAT = SOME PENDING
  BIRD = ALL OK
  FROG = ALL OK
我有困难,这意味着我被困住了。我不知道如何连接这些表。我的做法:

       $pdo = $db->query('SELECT  * 
       (SELECT COUNT(*) 
       FROM products 
       WHERE projects.project_id=orders.project_id) AS all,
       (SELECT SUM(`status`=`ok`) 
        FROM products 
        WHERE projects.id=orders.project_id) AS ok,
        FROM projects
        group by projects.id
      ')->fetchAll(PDO::FETCH_ASSOC);

将项目分组,然后检查每组是否所有记录都正常

   SELECT pj.id, pj.project, 
          case when sum(status <> 'ok') = 0 
               then 'all ok'
               else 'pending'
          end as overall_status
   FROM projects pj
   LEFT JOIN orders o on pj.id = o.project_id
   LEFT JOIN products pr on pr.order_id = o.id
   GROUP BY pj.id, pj.project
选择pj.id,pj.project,
总和(状态“正常”)为0时的情况
然后“一切正常”
其他“待定”
以整体状态结束
来自pj项目
pj.id=o.project\u id上的左连接订单o
在pr.order\U id=o.id上左键连接产品pr
按pj.id、pj.project分组
这一行:

sum(status <> 'ok') = 0
sum(状态“ok”)=0

总结这种情况出现的频率。必须是
true
才能对每个组都不正常

将项目分组,然后检查每个组的所有记录是否正常

   SELECT pj.id, pj.project, 
          case when sum(status <> 'ok') = 0 
               then 'all ok'
               else 'pending'
          end as overall_status
   FROM projects pj
   LEFT JOIN orders o on pj.id = o.project_id
   LEFT JOIN products pr on pr.order_id = o.id
   GROUP BY pj.id, pj.project
选择pj.id,pj.project,
总和(状态“正常”)为0时的情况
然后“一切正常”
其他“待定”
以整体状态结束
来自pj项目
pj.id=o.project\u id上的左连接订单o
在pr.order\U id=o.id上左键连接产品pr
按pj.id、pj.project分组
这一行:

sum(status <> 'ok') = 0
sum(状态“ok”)=0

总结这种情况出现的频率。它必须是
真的
才能对每个组都不正常

。。。从产品作为pr加入订单作为pr.order上的o\U id=o.id加入项目作为o.project上的pj\U id=pj.id其中…
。。。从产品作为pr加入订单作为pr.order上的o\U id=o.id加入项目作为o.project上的pj\U id=pj.id其中…
sum(status <> 'ok') = 0