DBIx::Class :结果集 order_by 基于列表中值的存在

发布于 2024-12-14 07:56:23 字数 141 浏览 0 评论 0原文

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

I am using DBIx::Class and I have got a ResultSet. I like to re-order the ResultSet. I like to check a particular column "City" against a fix list of values ("London", "New York" "Tokyo") If city is found in the list of values I like to move that result to the top group. If city is not found, I like to move that result to the bottom group in the ResultSet.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

世界等同你 2024-12-21 07:56:23

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')] }}
);

ORDER BY expr might be what you're looking for.

For example, here a table:

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

Here the special ordering:

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

Translating this into a ResultSet method:

$schema->resultset('Test')->search(
    {},
    {order_by => {-desc => q[name in ('London', 'New York', 'Tokyo')] }}
);
断爱 2024-12-21 07:56:23

类似于:

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

Something like:

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

Run as:

./myscript omega
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文