Я пытаюсь получить поиск по периметру, работая с DBIx :: Class, но пока этого не удалось.DBIx :: Поиск по периметру класса
SQL, я хотел бы, чтобы генерировать выглядит так:
SELECT
zip,
6371 * ACos(Cos(RADIANS(Lat)) * Cos(RADIANS(USERLAT)) * Cos(RADIANS(USERLNG) - RADIANS(Lng)) + Sin(RADIANS(Lat)) * Sin(RADIANS(USERLAT))) AS Distance
FROM
geopc
WHERE
6371 * ACos(Cos(RADIANS(Lat)) * Cos(RADIANS(USERLAT)) * Cos(RADIANS(USERLNG) - RADIANS(Lng)) + Sin(RADIANS(Lat)) * Sin(RADIANS(USERLAT))) <= DISTANCE
ORDER BY
Distance
Где USERLAT, USERLNG и DISTANCE должны быть переменными, которые придут в через в WebRequest.
Моих DBIx :: Класс Результат:
use utf8;
package MyApp::Models::Schema::Result::Geopc;
use strict;
use warnings;
use base 'DBIx::Class::Core';
__PACKAGE__->table("geopc");
__PACKAGE__->add_columns(
"id",
{ data_type => "bigint", is_nullable => 0, is_auto_increment => 1 },
"country",
{ data_type => "varchar", is_nullable => 0, size => 2 },
"language",
{ data_type => "varchar", is_nullable => 0, size => 2 },
"iso2",
{ data_type => "varchar", is_nullable => 0, size => 6 },
"region1",
{ data_type => "varchar", is_nullable => 0, size => 60 },
"region2",
{ data_type => "varchar", is_nullable => 0, size => 60 },
"region3",
{ data_type => "varchar", is_nullable => 0, size => 60 },
"region4",
{ data_type => "varchar", is_nullable => 0, size => 60 },
"zip",
{ data_type => "varchar", is_nullable => 0, size => 10 },
"city",
{ data_type => "varchar", is_nullable => 0, size => 60 },
"area1",
{ data_type => "varchar", is_nullable => 0, size => 80 },
"area2",
{ data_type => "varchar", is_nullable => 0, size => 80 },
"lat",
{ data_type => "double precision", is_nullable => 0 },
"lng",
{ data_type => "double precision", is_nullable => 0 },
"tz",
{ data_type => "varchar", is_nullable => 0, size => 30 },
"utc",
{ data_type => "varchar", is_nullable => 0, size => 10 },
"dst",
{ data_type => "varchar", is_nullable => 0, size => 1 },
);
__PACKAGE__->set_primary_key('id');
Я гугл вокруг, но не нашел хороший способ справиться с этим. Любая помощь будет очень высоко ценится.
Я использую MySQL ...
Лично я использовал бы хранимую процедуру для этого. Вы не можете привязать параметр к функции arg в select. – jordanm
Вы должны сделать это с помощью подзапроса и недокументированного атрибута 'from' ResultSet. Я вижу, работает ли это завтра. – nwellnhof