我正在嘗試使用 Eloquent 查詢從每個類別中獲取前 5 條記錄,類似于如下示例 MySQL 查詢;
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY secid ORDER BY created_at DESC) AS n
FROM trees
) AS x
WHERE n <= 5
這是我試過的
$q= Tree::select(['*',DB::raw("ROW_NUMBER() OVER (PARTITION BY secid ORDER BY created_at DESC) AS n")])
->WhereRaw(['n','<=','5'])
->選擇();
我收到“陣列到字串轉換”錯誤
我試過了
->WhereRaw('n','<=','5')
并得到
PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '5 n order by `trees`.`created_at` desc' at line 1
誰能指出我在這里做錯了什么?任何幫助將不勝感激。
uj5u.com熱心網友回復:
該whereRow方法的第一個引數是一個 sql 字串,第二個是一個系結陣列。為避免此錯誤,您需要進行以下呼叫:
->whereRaw('n <= ?', [5])
但仍然無法正確構建查詢。我建議你使用以下結構:
$subQuery = DB::table('trees')
->selectRaw('*, ROW_NUMBER() OVER (PARTITION BY secid ORDER BY created_at DESC) AS n');
$result = DB::query()->fromSub($subQuery, 'x')
->where('n', '<=', 5)->whereRaw()
->get();
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/535621.html
標籤:数据库拉维雄辩
