У меня есть запрос MySQL, где я присоединяюсь два значения, когда они +/- 3 «» друг от друга:Laravel «присоединиться на», где два значения находятся в пределах «х» друг от друга
...
inner join
on ABS(i.direction - i2.MWD) < 3
and ABS(i.direction - i2.MWD) < 3
(я не совсем уверен, почему «и» утверждение точно так же, но это то, что сделало его работу)
Я попытался преобразовать это красноречивый используя как
$join->on('i.direction', '-', 'i2.MWD', '<' 3)
и
$join->on('i.direction', '=', 'i2.MWD')
->where('i.direction', '-', 'i2.MWD', '<' 3)
Приведенные выше примеры дают мне пустой результат. Если я изменю '<' на '>' в любом примере, я получаю все объединенные данные из обеих таблиц.
Я также попытался с помощью DB :: сырыми, как обходной путь:
$join->on(DB::raw('ABS(input.direction - i2.MWD) < 3
and ABS(input.direction - i2.MWD) < 3'));
, который дает мне ошибку ниже:
SQLSTATE[42S22]: Column not found: 1054 Unknown column '' in 'on clause'
(SQL: select count(*) as aggregate
from (select * from `input`
inner join
(select MWD, SWH, SWP, BUOY,Time from stations order by Time desc limit 4)
as i2 on ABS(input.direction - i2.MWD) < 3
and ABS(input.direction - i2.MWD) < 3 = ``) count_row_table)
(замыкающей = '', который вставляется после 'i2.MWD) < 3' меня смущает).
Я был бы очень признателен, если бы кто-нибудь мог помочь мне придумать решение для соединения по двум значениям. I.direction & i2.MWD (плюс или минус 3) с использованием Eloquent.
Я попытался, как вы сказали: ($ join-> on ('i.direction', '=', 'i2.MWD') -> whereRaw ('i.direction - i2.MWD ', [3 ]), но я все еще получаю результаты, когда «i.direction» является точным соответствием «i2.MWD». Похоже, что инструкция объединения соответствует только первым критериям и не относится к выражению «whereRaw». – TomAudre