Как объединить четыре несвязанные таблицы mysqli?


у меня есть четыре таблицы, которые не связаны друг с другом.

каждый столбец имеет разные имена и данные, кроме столбца payment

таблицы выглядят следующим образом:

Таблица ventas1

id_ventas_so   cliente_software  producto_software   precio_software   payment
    1            Juan Carlos M        Windows              400          pagado

Таблица ventas2

id_producto   cliente_pro   producto    registro_pro    precio_pro   payment
     1           Maria       laptop        2018/09         1200       pagado

Таблица ventas3

id_libro    cliente_libro    libro    autor_libro    precio_libro   payment
   1            Pedro       Sombras      Anónimo          50         pagado

Таблица ventas4

id_suscripcion    usuario_premium    suscripcion    payment
       1               Marcos            40        pendiente

из четырех таблиц мне просто нужно отобразить список клиентов со статусом оплаты подтверждено (оплачено).

как я могу получить список следующим образом, объединив несвязанные таблицы в один запрос?

    Cliente        Producto     Autor    Registro    Precio    Estado
Juan Carlos M      Windows                             400     pagado
     Maria         laptop                2018/09      1200     pagado
     Pedro         Sombras     Anónimo                  50     pagado

я разрабатываю с объектно-ориентированными подготовленными запросами mysqli

while ($stmt->fetch()) {
   //Obtener los resultados deseados
}
 4
Author: Pedro, 2018-07-12

1 answers

Похоже, вам нужен оператор UNION. То, что это делает, объединяет в один "ответ" результатов выполнение нескольких операторов SQL. "Единственным" важным требованием в вашем примере является то, что они имеют одинаковое количество столбцов, но поскольку вы можете повторно назвать их или создать пустые столбцы по своему вкусу, вы можете использовать такой оператор:

SELECT cliente_software as Cliente, producto_software as Producto, null as Autor,
null as Registro, precio_software as Precio, payment as Estado FROM ventas1 WHERE payment = 'pagado'
UNION
SELECT cliente_pro as Cliente, producto as Producto, null as Autor,
registro_pro as Registro, precio_pro as Precio, payment as Estado FROM ventas2 WHERE payment = 'pagado'
UNION
SELECT cliente_libro as Cliente, libro as Producto, null as Autor,
null as Registro, precio_libro as Precio, payment as Estado FROM ventas3 WHERE payment = 'pagado'
UNION
SELECT usuario_premium as Cliente, null as Producto, null as Autor,
null as Registro, suscripcion as Precio, payment as Estado FROM ventas4 WHERE payment = 'pagado';

Столбцы, которые не соответствуют таблице, вы определяете как null и заполняете те, которые принадлежите.

Я взял на себя смелость попробовать его в SQLfiddle, который я оставляю вам по этой ссылке.

 1
Author: Juliosor, 2018-07-12 08:03:49