ORDER BY myfunction(col, ?, ?) DESC
과 같이 주문을 생성하는 올바른 방법은 DBIx::Class
의 바인드 값입니까?DBIx :: Class의 자리 표시 자로 정렬
현재 리터럴 SQL을 사용하고 있지만 몇 가지 이유로 최적이 아닙니다. 이 같은
$rs->search(undef, { order_by => \"myfunction(col, $v1, $v2) DESC" });
ORDER BY myfunction(col, ?, ?) DESC
과 같이 주문을 생성하는 올바른 방법은 DBIx::Class
의 바인드 값입니까?DBIx :: Class의 자리 표시 자로 정렬
현재 리터럴 SQL을 사용하고 있지만 몇 가지 이유로 최적이 아닙니다. 이 같은
$rs->search(undef, { order_by => \"myfunction(col, $v1, $v2) DESC" });
내가 관리 못했다는 DBIx::Class
올바른 ORDER BY
를 생성 할 수 있습니다. 다음은 코드입니다.
$rs->search(undef, {
order_by => \[
'myfunction(mycol, ?, ?) DESC', map [dummy => $_], $v1, $v2
]
});
뭔가 :
$rs->search(
undef,
{
'+columns' => [{
'res' => {
'func' => ['me.col', \['?' => $val1], \['?' => $val2]],
'-as' => 'res',
},
}],
'order_by' => {'-desc' => 'res'},
}
);
이 (MySQL의 & ($val1, $val2) = qw(val1 val2)
에 대한) 생성합니다
SELECT `me`.`id`, ..., FUNC(`me`.`col`, ?, ?) AS `res`
FROM `table` `me`
ORDER BY `res` DESC:
'val1',
'val2'
괜찮습니다. +1. 이 객체는 행 객체에 추가 열을 채 웁니다 (즉,'$ row-> get_columns'의 결과에 'res'가 포함될 것입니다). 그러면 일부 코드가 손상 될 수 있습니다. –
해결 방법으로이 열 (예 :'-res')을 표시하고 확장 된'DBIx :: Class :: Row :: inflate_result()'메소드에서 제거 할 수 있습니다. –
BTW, [자리 표시 자 및 바인드 값 (하위 쿼리)이있는 리터럴 SQL] (http://search.cpan.org/~frew/SQL-Abstract-1.73/lib/SQL/Abstract.pm#Literal_SQL_with_placeholders_and_bind_values_%28subqueries)에 설명되어 있습니다. % 29) SQL :: 초록 –