php - 排序顺序参数

标签 php mysql sql laravel

我正在尝试通过执行以下操作将变量传递给 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/

相关文章:

php - Mysql多个where与post数据php

php - 当某些特定值与给定数组匹配时,从多维数组中删除键

javascript - 编辑个人记录

php - MYSQL PHP 根据重复列合并多行

python - postgresql 中具有锁定和选择更新的一致性

mysql - JSON 响应的日期时间发生变化

php - 如何在 SQL 中执行多个更新查询

php - SQL : Column is ambigious

mysql - 从两个不同的表创建表

php - 有间隙的 pChart 时间线