2014-11-22 4 views
0

나는 이상한 상황이 있으며 무엇이 잘못되었는지 잘 모릅니다. 나는 간단한 조건을 기반으로 일치하는 것을 찾는다. 이 쿼리는 mysql에서 잘 실행되지만 PHP를 통해 호출 할 때 값을 반환하지 않습니다.PHP에서 자체 조인 조건이 실패하지만 mysql에서 작동합니다.

select * from Requests p inner join Requests c on c.ID<>p.ID 
where usr_ID<>4 
and p.c_ID = c.c_ID 

다음은 작동하지 않지만 제대로 작동합니다.

DB::table('Requests as parent') 
    ->join('Requests as child', 'parent.ID', '<>', 'child.ID') 
    ->where('parent.usr_ID', '<>', 4) 
    **->where('parent.c_ID', '=', 'child.c_ID')** 
    ->get(); 

위의 쿼리에서 두 번째 조건 (c_ID)을 제거하면 올바른 값이 반환됩니다. 모든 행에 대해이 값은 1입니다. child.c_ID 또는 parent.c_ID를 1로 대체하면 다시 작동합니다. 나는 다른 컬럼에서도 시도해 보았고 같은 문제를 발견했다.

모든 포인터?

답변

1

쿼리 빌더는 두 번째에서 만드는 어떤 곳 조건은 다음과 같습니다

WHERE parent.c_ID = 'child.c_ID' 

그래서 대신 입력을 받아, 바로 최종 SQL 쿼리에 삽입한다 "정상적인"where() 사용 whereRaw()

->whereRaw('parent.c_ID = child.c_ID') 

또는 당신은 또한 세 번째 인수에 DB::raw()를 사용할 수

->where('parent.c_ID', '=', DB::raw('child.c_ID')) 

둘 모두 본질적으로 동일하므로 더 좋아하는 용도로 사용하십시오.

+0

빠른 답장을 보내 주셔서 감사합니다. 그것은 작동하는 것처럼 보이지만 모든 장소에서 비슷한 조건을 가지고 있으며이 자체 조인을 제외하고는 잘 작동합니다. 나는 그것들 모두를 바꿀 필요가 있니? – Chandra

+0

그건 그렇고, 이것은 램프 스택에 내 첫 프로젝트입니다. 나는이 모든 동안 마이크로 소프트와 붙어 있었다. – Chandra

+0

반갑습니다. 그것은 ... 두 열을 비교하는 모든 조건을 업데이트해야합니다. 왜냐하면 laravel은 두 번째 (또는 세 번째) 매개 변수를 열 이름이 아닌 값으로 평가하려고하기 때문입니다. 무슨 뜻인지 알 겠어? – lukasgeiter