2011-11-07 35 views
1

我正在使用DBIx :: Class,並且我得到了一個ResultSet。我喜歡重新排序ResultSet。我喜歡根據固定的價值清單(「倫敦」,「紐約」,「東京」)檢查某個特定列「城市」。如果我希望將價值清單中的城市發現到最高組,如果找不到城市,我喜歡將結果移到ResultSet中的底層組。DBIx :: Class:結果集order_by基於列表中是否存在值

回答

1

ORDER BY expr可能是你在找什麼。

例如,下面的表格:

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

這裏特殊的順序:

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  | 
+----+-----------+ 

翻譯到這一點的ResultSet方法:

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

使用哪個版本適用?它不適用於DBIx :: Class 0.08123。我也沒有在SQL :: Abstract中看到任何引用,但這可能沒有多大意義。 – aartist

+0

是否可以在新字段上創建其他動態字段並執行order_by? – aartist

+0

daxim添加的例子(感謝您的編輯,順便說一句,我的最後一句話有點含糊:)並不完全是它的意思。你可以爲order_by參數指定一個字符串引用,這樣你就可以建立一個字符串,比如「name ='London'desc,name ='Paris'desc,name ='Tokyo'desc」 – larsen

0

喜歡的東西:

#!/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; 

運行方式:

./myscript omega 
+0

我找DBIC答案。 – aartist

相關問題