/ / order by mit Platzhaltern in DBIx :: Class - perl, dbix-class

Sortieren nach mit Platzhaltern in DBIx :: Class - perl, dbix-class

Was ist der richtige Weg, um einen Auftrag durch gleiches zu erzeugen ORDER BY myfunction(col, ?, ?) DESC mit bind Werten in DBIx::Class?

Zur Zeit verwende ich dafür literal SQL, aber das ist aus verschiedenen Gründen nicht optimal.

$rs->search(undef, { order_by => "myfunction(col, $v1, $v2) DESC" });

Antworten:

4 für die Antwort № 1

Etwas wie das:

$rs->search(
undef,
{
"+columns" => [{
"res" => {
"func" => ["me.col", ["?" => $val1], ["?" => $val2]],
"-as"  => "res",
},
}],
"order_by" => {"-desc" => "res"},
}
);

wird generieren (für MySQL & ($val1, $val2) = qw(val1 val2)):

SELECT `me`.`id`, ..., FUNC( `me`.`col`, ?, ? ) AS `res`
FROM `table` `me`
ORDER BY `res` DESC:
"val1",
"val2"

2 für die Antwort № 2

Ich habe es geschafft zu bekommen DBIx::Class das richtige generieren ORDER BY. Hier ist der Code:

$rs->search(undef, {
order_by => [
"myfunction(mycol, ?, ?) DESC", map [dummy => $_], $v1, $v2
]
});