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