Wdy*_*Dev 5 sql sql-server laravel laravel-5 laravel-query-builder
任何人都可以帮我写下面的SQL语句的数据库查询版本.我需要一些关于select语句和分区连接的帮助.
到目前为止,我已设法做到这一点.
$query = DB::table(raw('SapakInAdminOrder a'))
->select(raw('a.*'))
->leftJoin(raw('currency cu'), 'a.currency', '=', 'cu.id')
->leftJoin(raw('moodboards m'), 'a.orderMoodboardID', '=', 'm.id')
->join(raw('clients b'), 'a.clientID', '=', 'b.id')
->leftJoin(raw('moodboards mc'), 'b.moodboardID', 'mc.id')
->join(raw('sapakim c'), 'b.sapakID', '=', 'c.id')
->leftJoin(raw('sapakim sm'), 'c.managerid', '=', 'sm.id')
->leftJoin(raw('products p'), 'a.productKey', '=', 'p.id')
->where(function ($query) {
$query->whereNull('a.isDeleted');
$query->orWhere('a.isDeleted', '!=', 1);
});
Run Code Online (Sandbox Code Playgroud)
但我需要实现这一目标.
select * from (select ROW_NUMBER() OVER(ORDER BY case when (indesign.status=4 or indesign.statusdate is null) then getdate()+2 else indesign.statusdate end ASC) AS RowNum,a.*
FROM sapakInAdminOrder a
left join currency cu on cu.id=a.currency
left join moodboards m on m.id=a.orderMoodboardID
inner join Clients b on a.clientID=b.id
left join moodboards mc on mc.id=b.moodboardID
inner join Sapakim c on b.sapakID=c.id
left join Sapakim sm on sm.id=c.managerid
left join products p on p.id=a.productKey
left join (select * from (select ROW_NUMBER() over(PARTITION BY orderID ORDER BY id DESC) r, * from orderCommunication ) f where r=1) chat on chat.orderId = a.id
left join (select id,[status],orderid,approveSMSDate,coverImage,statusDate from (SELECT id,[status],statusDate,approveSMSDate,coverImage,orderid,ROW_NUMBER() OVER(PARTITION BY orderid ORDER BY id DESC) AS r FROM SapakimInAdminDesigns) f where r=1) indesign on a.id=indesign.orderid
where (a.isDeleted is null or a.isDeleted != 1) and
c.inAdminManagerID=(select id from sapakim where sapakguid='test') and
c.sapakguid='test' and
a.isFreeDesign=0 and
a.transactionID = -1 and
(a.designerPaid is null or a.designerPaid=0) and
(chat.sentToPrinter is null and chat.sentToManager is null and chat.sentToDesigner is null)
) bb where RowNum>=1 and RowNum<31
ORDER BY RowNum asc
Run Code Online (Sandbox Code Playgroud)
我可以做简单的但不能真正地围绕分区连接和select语句.
我真的很感激你的帮助.
提前致谢.
我也遇到了此类问题,但我找到了解决方案,并且对我来说效果很好!
对于此类查询,请使用DB::unprepared() :
$path = base_path() . "/storage/agency.sql";
$sql = file_get_contents($path);
DB::unprepared(DB::raw($sql));
Run Code Online (Sandbox Code Playgroud)
Laravel 中的所有 SQL 命令默认都是准备好的,但有时您需要在非准备模式下执行命令,因为某些数据库中的某些命令无法在准备模式下运行。
| 归档时间: |
|
| 查看次数: |
1129 次 |
| 最近记录: |