1

我正在使用 DBIx::Class 并且我有一个 ResultSet。我喜欢重新排序 ResultSet。我喜欢根据值的固定列表(“伦敦”、“纽约”、“东京”)检查特定列“城市”如果在值列表中找到城市,我想将该结果移至顶部组。如果未找到 city,我喜欢将该结果移至 ResultSet 中的底部组。

4

2 回答 2

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')] }}
);
于 2011-11-08T15:05:03.900 回答
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
于 2011-11-08T00:13:11.677 回答