2016-10-06 2 views
0

У меня есть запрос 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.

ответ

0

Что ты пытался сделать здесь:

->where('i.direction', '-', 'i2.MWD', '<' 3) 

вы должны изменить для сырья, где, как это:

->whereRaw('i.direction - i2.MWD < ?', [3]) 

Это должно помогает.

+0

Я попытался, как вы сказали: ($ join-> on ('i.direction', '=', 'i2.MWD') -> whereRaw ('i.direction - i2.MWD TomAudre

Смежные вопросы