DBIx :: Class:Resultset order_by基于列表中存在的值

时间:2011-11-07 23:54:06

标签: sql perl dbix-class

我正在使用DBIx :: Class,我有一个ResultSet。我想重新排序ResultSet。我想检查特定列“城市”与修正值列表(“伦敦”,“纽约”“东京”)如果在值列表中找到城市,我想将该结果移动到顶层组。如果找不到city,我想将结果移动到ResultSet中的底部组。

2 个答案:

答案 0 :(得分: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')] }}
);

答案 1 :(得分: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