我正在尝试通过执行以下操作将变量传递给 DB::select(DB::raw(''))
的 order by
片段:
....order by :sort :order;'), array('sort' => $sort, 'order' => $order));
我在 :order
上遇到语法错误有什么原因吗?
如果我将 :sort
替换为包含 qtSTDDEV
的列,:order
上的错误仍然存在
代码
$sort = 'qtSTDDEV';
$order = 'order';
DB::select(DB::raw('SELECT mid as mID,
round((x.qty_sum / x.qty_count), 5) as qtAVG,
round(x.qty_stddev, 5) as qtSTDDEV,
x.qty_count as qtCOUNT,
round((x.rel_sum / x.rel_count), 5) as relAVG,
round(x.rel_stddev, 5) as relSTDDEV,
x.rel_count as relCOUNT,
FROM (SELECT mid,
SUM( mt = 'qt' ) as qty_count,
SUM(CASE WHEN mt = 'qt' THEN rt END) as qty_sum,
STD(CASE WHEN mt = 'qt' THEN rt END) as qty_stddev,
SUM( mt = 'rel' ) as rel_count,
SUM(CASE WHEN mt = 'rel' THEN rel END) as rel_sum,
STD(CASE WHEN mt = 'rel' THEN rel END) as rel_stddev
FROM t_r r
right join t_m t on t.mid = r.mid
GROUP BY mid
) x
right join m_k m on m.mid = x.mid
right join k_d k on k.kid = m.kid
order by :sort :order;'), array('sort' => $sort, 'order' => $order));
最佳答案
您发布的代码不是有效的 PHP,因此很难提供 100% 肯定的答案。
但是,可以肯定的是列名不能作为绑定(bind)参数传递。您需要从 PHP 代码生成那部分 SQL 查询。
此外,order by
子句中的列名需要用逗号分隔。
我猜你想替换这个:
order by :sort :order;'), array('sort' => $sort, 'order' => $order));
与:
order by ' . $sort . ', ' . $order . ';'));
关于php - 排序顺序参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53798073/