2011-11-07 3 views
1

DBIx :: Classを使用していますが、ResultSetがあります。私はResultSetを並べ替えるのが好きです。私は特定の列 "City"を値の修正リスト( "London"、 "New York" "Tokyo")に対してチェックしたい。値のリストにcityがある場合、その結果をトップグループに移動したい。都市が見つからない場合、その結果をResultSetの一番下のグループに移動するのが好きです。DBIx :: Class:リストに値が存在することに基づいて、order_byが返されます

#!/usr/bin/env perl 
use strict; 
use warnings; 
my $what = shift or die; 
my @ary = qw(alpha beta gamma); 
unshift(@ary,$what) unless (grep(/$what/,@ary)); 
print "@ary\n"; 
1; 

ラン:

答えて

1

ORDER BY exprは、あなたが探しているものかもしれません。

例えば、ここにテーブル:ここでは特別な順序

mysql> select * from test; 
+----+-----------+ 
| id | name  | 
+----+-----------+ 
| 1 | London | 
| 2 | Paris  | 
| 3 | Tokio  | 
| 4 | Rome  | 
| 5 | Amsterdam | 
+----+-----------+ 

:ResultSetメソッドにこれを翻訳

mysql> select * from test order by name = 'London' desc, 
            name = 'Paris' desc, 
            name = 'Amsterdam' desc; 
+----+-----------+ 
| id | name  | 
+----+-----------+ 
| 1 | London | 
| 2 | Paris  | 
| 5 | Amsterdam | 
| 3 | Tokio  | 
| 4 | Rome  | 
+----+-----------+ 

:私はDBIC答えを探しています

$schema->resultset('Test')->search(
    {}, 
    {order_by => {-desc => q[name in ('London', 'New York', 'Tokyo')] }} 
); 
+0

これはどのバージョンですか? DBIx :: Class 0.08123では動作しません。 SQLで抽象的な参照は見られませんでしたが、あまり意味がないかもしれません。 – aartist

+0

追加の動的フィールドを作成し、新しいフィールドでorder_byを実行できますか? – aartist

+0

例がdaximによって追加されました(編集していただきありがとうございます、私の最後の文は少し曖昧でした)。 order_byパラメータの文字列への参照を指定できるので、 "name = 'London' desc、name = 'Paris' desc、name = 'Tokyo' desc"のような文字列を作成できます。 – larsen

関連する問題