【问题标题】:How to write mysql join sub query from 5 tables in laravel controller如何在 laravel 控制器中从 5 个表中编写 mysql 连接子查询
【发布时间】:2019-10-09 16:35:19
【问题描述】:

我有一个类似下面的 MySQL 查询,我想在 laravel 控制器中使用它,

我知道在laravel中怎么用join,但是当我们在join语句中有另一个子查询的时候就不知道怎么写了,

SELECT barangs.id, barangs.kode_barang, barangs.nama_barang, 
IFNULL(a.QTY_IN,0) AS masuk, IFNULL(b.QTY_OUT,0) AS keluar, 
IFNULL(c.PO_RETUR_QTY,0) AS po_retur, IFNULL(d.CUS_RETUR_QTY,0) AS cus_retur, 
barangs.stok AS stok_akhir, barangs.harga_beli
FROM barangs 

LEFT JOIN (
SELECT barang_masuk_detail.id_barang, barang_masuk.tgl_masuk, SUM(barang_masuk_detail.qty_terima) AS QTY_IN
FROM barang_masuk
LEFT JOIN barang_masuk_detail ON barang_masuk.id = barang_masuk_detail.id_brg_masuk
/* WHERE barang_masuk.tgl_masuk BETWEEN "2015-08-01" AND "2015-08-31" */
GROUP BY barang_masuk_detail.id_barang ASC
)AS a ON a.id_barang = barangs.id

LEFT JOIN (
SELECT barang_keluar_detail.id_barang, barang_keluar.tgl_kirim, SUM(barang_keluar_detail.qty_dikirim) AS QTY_OUT
FROM barang_keluar
LEFT JOIN barang_keluar_detail ON barang_keluar.id = barang_keluar_detail.id_brg_keluar
/* WHERE barang_keluar.tgl_kirim BETWEEN "2015-08-01" AND "2015-08-31"*/
GROUP BY barang_keluar_detail.id_barang ASC
)AS b ON b.id_barang = barangs.id

/*join retur try */
LEFT JOIN (
SELECT retur_beli_detail.barang_id, retur_beli.tgl_retur, SUM(retur_beli_detail.retur_qty) AS PO_RETUR_QTY
FROM retur_beli
LEFT JOIN retur_beli_detail ON retur_beli.id = retur_beli_detail.retur_id
/* WHERE retur_beli.tgl_retur BETWEEN "2015-08-01" AND "2015-08-31"*/
GROUP BY retur_beli_detail.barang_id ASC
)AS c ON c.barang_id = barangs.id

/*join retur dari customer */
LEFT JOIN (
SELECT retur_kirim_detail.barang_id, retur_kirim.tgl_retur, SUM(retur_kirim_detail.retur_qty) AS CUS_RETUR_QTY
FROM retur_kirim
LEFT JOIN retur_kirim_detail ON retur_kirim.id = retur_kirim_detail.retur_id
/* WHERE retur_kirim.tgl_retur BETWEEN "2015-08-01" AND "2015-08-31"*/
GROUP BY retur_kirim_detail.barang_id ASC
)AS d ON d.barang_id = barangs.id

如果我在 sqlyog 中运行,它会按预期工作,但不确定如何用 laravel 语法编写,

哦,如果可能的话,根据用户发送的请求,在 laravel 中使用 whereBetween 过滤它,我需要把语法放在哪里?

like whereBetween([ $request->startDate, $request->endDate ]);

【问题讨论】:

    标签: mysql laravel eloquent laravel-blade query-builder


    【解决方案1】:

    使用以下语法执行查询的简单方法:-

    DB::select("select * from table JOIN ...");
    

    这将为您提供过滤数据的集合。

    编辑的代码

    要使用whereBetween() Laravel where 查询,您需要编写如下的 MySQL 查询

    $startDate = $request->startDate;
    $endDate = $request->endDate;
    
    DB::select("
        select * from table JOIN ... 
        where fieldName BETWEEN '$startDate' AND '$endDate'
    ");
    

    要添加更多条件,我们需要编写普通 MySQL 查询。

    【讨论】:

    • 嗨,谢谢,我想在其中过滤使用 where between,我如何添加它?比如 whereBetween([ $request->startDate, $request->endDate ]);
    • 您好,谢谢,我在您的评论前使用了“.$startDate.”,所以我只需要一个引号而不是点来连接:D 您节省了我的时间,谢谢 :)
    猜你喜欢
    • 2021-08-08
    • 2015-10-19
    • 1970-01-01
    • 2012-02-03
    • 2014-07-27
    • 1970-01-01
    • 2019-09-21
    • 2017-12-06
    • 2017-05-25
    相关资源
    最近更新 更多