mysql - 对多个表使用 UNION 和 WHERE

标签 mysql sql

$whls = querywheels("SELECT * FROM (pc.pn_partcar AS partnum, pc.name_partcar AS descript, pc.weight_partcar AS weight, pc.cycletime_partcar AS cycletime, pc.cavity_partcar AS cavity, p.name_proses AS proses, mm.material_name AS material FROM partcar as pc
        INNER JOIN proses AS p ON p.id_proses = pc.id_prosesfk
        INNER JOIN material AS mm ON mm.material_id = p.material_idfk
        INNER JOIN detailassembly AS da ON da.partcar_idfk = pc.id.partcar

        UNION

        b.pn_barbell AS partnum, b.type_barbell AS descript, wh.cycletime_wheel AS cycletime, wh.cavity_wheel as cavity FROM barbell AS b 

        INNER JOIN wheel AS wh ON b.id_wheelfk = wh.id_wheel
        INNER JOIN detailassembly AS da ON barbell_idfk = b.barbell_id)

        WHERE pc.id_carfk = c.id_car FROM car AS c AND b.id_carfk = c.id_car");

这是我的代码,我不知道我的错在哪里,有人可以帮我纠正这个代码吗?我很困惑。

这是我的数据库

enter image description here

我想要这样的输出

|ID Car|partnum|descript  |cycletime|cavity|proses|material|Qty |
|---------------------------------------------------------------|
|N4002 |22222  |partcar1  | 23      |  3   | PUM  | Plactic| 1  |
|      |22222  |partcar2  | 23      |  3   | PUM  | Plactic| 1  |
|      |22222  |partcar3  | 23      |  3   | PUM  | Plactic| 1  |
|      |22222  |partcar4  | 23      |  3   | PUM  | Plactic| 1  |
|      |22233  |Barbell1  | 20      |  3   | PUM  | Plactic| 2  |

请帮我解决我的代码。我无法运行它。

编辑: 这是我的错误 警告:mysqli_fetch_assoc() 期望参数 1 为 mysqli_result, bool 值在 C:\xampp\htdocs\hwbase\PHP\connect.php 第 17 行给出

这是我的职责

function querywheels($sql)
    {
        global $con;
        //query for takes data

    $result = mysqli_query($con,$sql);
    /*$whls = mysqli_fetch_assoc($result);*/
    $rows = [];
        while ($whs = mysqli_fetch_assoc($result)) {
            $rows []= $whs;
        }
        return $rows;
    }

最佳答案

尝试这个查询

SELECT *
FROM
  (
    SELECT
      pc.pn_partcar AS partnum,
      pc.name_partcar AS descript,
      pc.weight_partcar AS weight,
      pc.cycletime_partcar AS cycletime,
      pc.cavity_partcar AS cavity,
      p.name_proses AS proses,
      mm.material_name AS material,
      pc.id_carfk,
      da.qty
    FROM partcar as pc
    JOIN proses AS p ON p.id_proses = pc.id_prosesfk
    JOIN material AS mm ON mm.material_id = p.material_idfk
    JOIN detailassembly AS da ON da.partcar_idfk = pc.id_partcar

    UNION ALL

    SELECT
      b.pn_barbell AS partnum,
      b.type_barbell AS descript,
      NULL, -- weight
      wh.cycletime_wheel AS cycletime,
      wh.cavity_wheel as cavity,
      NULL, -- proses
      NULL, -- material
      b.id_carfk,
      da.qty
    FROM barbell AS b
    JOIN wheel AS wh ON b.id_wheelfk = wh.id_wheel
    JOIN detailassembly AS da ON da.barbell_idfk = b.id_barbell
  ) q
JOIN car AS c ON q.id_carfk = c.id_car

如果您不需要来自 car 的任何信息(例如 pn_cardescription),您可以仅使用子查询

SELECT
  pc.pn_partcar AS partnum,
  pc.name_partcar AS descript,
  pc.weight_partcar AS weight,
  pc.cycletime_partcar AS cycletime,
  pc.cavity_partcar AS cavity,
  p.name_proses AS proses,
  mm.material_name AS material,
  pc.id_carfk,
  da.qty
FROM partcar as pc
JOIN proses AS p ON p.id_proses = pc.id_prosesfk
JOIN material AS mm ON mm.material_id = p.material_idfk
JOIN detailassembly AS da ON da.partcar_idfk = pc.id_partcar

UNION ALL

SELECT
  b.pn_barbell AS partnum,
  b.type_barbell AS descript,
  NULL, -- weight
  wh.cycletime_wheel AS cycletime,
  wh.cavity_wheel as cavity,
  NULL, -- proses
  NULL, -- material
  b.id_carfk,
  da.qty
FROM barbell AS b
JOIN wheel AS wh ON b.id_wheelfk = wh.id_wheel
JOIN detailassembly AS da ON da.barbell_idfk = b.id_barbell

关于mysql - 对多个表使用 UNION 和 WHERE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49688422/

相关文章:

php - 如何从三个表中获取没有重复行的记录?

mysql - MySQL 查询错误(禁用词?)

mysql - 保留行,即使它们在其他连接表 MySQL 查询中没有任何行

mysql - SQL MYSQL 多表查询连接

sql - 左连接导致查询解析时间大幅增加

MySQL 返回日期/时间现在减去 1 小时的记录?

php - 显示包含来自数据源的信息的 Google 图表

mysql - 需要在具有开始日期和结束日期的选定日期之间按天列出活跃客户列表(也为空)

mysql - 什么时候需要注意 SQL 查询中的 NULL 值?

javascript - 如果用户名存在于同一页面上,使用 AJAX 和 PHP 来 "Alert"用户?