DBIx :: Class: Resultset order_by, основанный на существовании значения в списке - PullRequest
1 голос
/ 08 ноября 2011

Я использую DBIx :: Class и получил ResultSet. Мне нравится переупорядочивать ResultSet. Мне нравится проверять конкретный столбец «Город» по фиксированному списку значений («Лондон», «Нью-Йорк», «Токио»). Если в списке значений обнаружен город, я хочу переместить этот результат в верхнюю группу. Если город не найден, я хотел бы переместить этот результат в нижнюю группу в ResultSet.

Ответы [ 2 ]

1 голос
/ 08 ноября 2011

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')] }}
);
0 голосов
/ 08 ноября 2011

Что-то вроде:

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