【发布时间】:2011-12-24 01:36:07
【问题描述】:
我正在使用 DBIx::Class 并且我有一个 ResultSet。我喜欢重新排序 ResultSet。我喜欢根据值的固定列表(“伦敦”、“纽约”、“东京”)检查特定列“城市”如果在值列表中找到城市,我想将该结果移至顶部组。如果未找到 city,我喜欢将该结果移动到 ResultSet 中的底部组。
【问题讨论】:
标签: sql perl dbix-class
我正在使用 DBIx::Class 并且我有一个 ResultSet。我喜欢重新排序 ResultSet。我喜欢根据值的固定列表(“伦敦”、“纽约”、“东京”)检查特定列“城市”如果在值列表中找到城市,我想将该结果移至顶部组。如果未找到 city,我喜欢将该结果移动到 ResultSet 中的底部组。
【问题讨论】:
标签: sql perl dbix-class
ORDER BY expr 可能就是您要找的。p>
例如,这里有一个表格:
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')] }}
);
【讨论】:
类似:
#!/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
【讨论】: