2016-10-06 4 views
0

sind habe ich eine MySQL-Abfrage, wo ich auf zwei Werte kommen, wenn sie +/- ‚3‘ voneinander:Laravel ‚kommen auf‘, wo zwei Werte innerhalb ‚x‘ voneinander

... 
inner join 
on ABS(i.direction - i2.MWD) < 3 
and ABS(i.direction - i2.MWD) < 3 

(ich bin nicht ganz sicher, warum die ‚und‘ Aussage ist genau die gleiche, aber das ist, was machte es funktioniert)

ich habe versucht, dies zu Eloquent Umwandlung sowohl mit

$join->on('i.direction', '-', 'i2.MWD', '<' 3) 

und

Die obigen zwei Beispiele geben mir ein leeres Ergebnis. Wenn ich die '' zu '>' in jedem Beispiel ändere, bekomme ich alle verbundenen Daten aus beiden Tabellen.

Ich habe auch versucht, mit DB :: roh als Behelfslösung:

$join->on(DB::raw('ABS(input.direction - i2.MWD) < 3 
and ABS(input.direction - i2.MWD) < 3')); 

die mir die folgenden Fehler gibt:

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) 

(den nachgestellten = '', die nach eingeführt wird die 'i2.MWD) < 3' verwirrte mich).

Ich wäre sehr dankbar, wenn jemand mir helfen könnte, eine Lösung zu finden, um die beiden Werte i.direction & i2.MWD (plus oder minus 3) mit Eloquent zu verbinden.

Antwort

0

Was Sie versuchte hier zu tun:

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

müssen Sie für einen rohen ändern, wo wie folgt aus:

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

Dies hilft sollte.

+0

Ich habe versucht, wie Sie vorgeschlagen: ($ join-> on ('i.direction', '=', 'i2.MWD') -> whereRaw ('i.direction - i2.MWD TomAudre