используя UNION и WHERE с несколькими таблицами

0
$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");

это мой код, и я не знаю, где моя ошибка, может ли кто-нибудь помочь мне исправить этот код? Я не совсем понимаю.

и это моя база данных

Изображение 174551

Я хочу сделать вывод следующим образом

|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  |

пожалуйста, помогите мне с моим кодом. Я не могу запустить его.

EDIT: это моя ошибка. Предупреждение: mysqli_fetch_assoc() ожидает, что параметр 1 будет mysqli_result, boolean задан в 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;
    }
  • 2
    И в чем проблема? Вы получаете ошибку или нет ожидаемый результат или ...?
  • 0
    Ой, подождите, я забыл поставить ошибку. @JoakimDanielson
Показать ещё 6 комментариев
Теги:

2 ответа

0
Лучший ответ

Попробуйте этот запрос

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_car, description), вы можете использовать только подзапрос

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
  • 0
    все еще то же самое, получил ошибку
  • 0
    @Ainal Yaqin - я изменил и добавил QTY . Попробуйте еще раз.
Показать ещё 6 комментариев
0

Вы должны исправить много вещей в своем запросе:

  1. Вы забыли ключевое слово SELECT внутри 2 подзапросов
  2. Запрос союза должен иметь одинаковые номера столбцов результатов и типов
  3. Подзапрос должен иметь псевдоним
  4. Вы не можете использовать FROM после WHERE CLAUSE
  5. Вы должны выбрать id_carfk внутри подзапросов, чтобы выполнить соединение с таблицей CAR во внешнем запросе

Вот запрос, который хорошо сформирован

SELECT c.id_car
     , t.*
FROM   ( SELECT     id_carfk
                  , 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
         SELECT     id_carfk
                  , b.pn_barbell       AS partnum
                  , b.type_barbell     AS descript
                  , NULL
                  , wh.cycletime_wheel AS cycletime
                  , wh.cavity_wheel    AS cavity
                  , NULL
                  , NULL
                  , NULL
         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 ) t
JOIN   car AS c
  ON t.id_carfk = c.id_car
 AND t.id_carfk = c.id_car 
  • 0
    Я использую этот код, но все еще ничего,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню