2013-12-09 2 views
0

그래서 나는 mysql 데이터베이스에서 웅변적인 ORM을 사용하는 laravel 3을 사용하고 있습니다. 나는 SQL 서버에 대한 왕복 여행을 반복하는 함수를 가지고 있는데, 제한된 테스트 케이스로 작업을하고있다. 그러나 나는 SQL 쿼리에서 연산의 순서에 대해 100 % 확실하지 않다. 누군가 내가 나에게 맞는지에 대한 생각을 줄 수 있기를 바란다. 오래된 코드는 mysql "또는"질의 작업 순서

$notifications = Notification::where(condition-1-a)->where(condition-1-b)->get(); 
    foreach ($locations = DB::table(table)->where(propertyX)->get() as $location) { 
     $extra_notifications = Notification::where(condition-2-a)->where(condition-2-b)->get(); 
     $notifications = array_merge($notifications,$extra_notifications); 
    } 

내가 위의 코드가 작동 알고 다음과 절연 일을 계속 각 쿼리는 자신의 실체이기로 실행 한 후 결과를 병합하기 때문이다, 그러나 당신이 시작하면 더 많은 위치를 점점 실행하는 데 시간이 오래 걸립니다. 나는이 문제를 줄이기 위해 SQL 서버를 한 번만 둘러보고이 코드를 생각해 냈습니다.

$notifications = Notification::where(condition-1-a)->where(condition-1-b); 
    foreach ($locations = DB::table(table)->where(propertyX)->get() as $location) { 
     $notifications = $notifications -> or_where(condition-2-a)->where(condition-2-b); 
    } 
$notifications = $notifications->get(); 

여기 내 문제는 어떻게 or_where가 작동하는지 잘 모르겠다는 것입니다. 그것은 코드로 익숙한 단어로 SQL 문자열을 생성하지만, 나는 그들이 같은 방식으로 작동 할 지 확신하지 못합니다. 생성 된 문자열은

입니다. 내가 찾는 주요한 점은 쿼리 실행 방법을 확인하는 것입니다. 이런 식으로 도망 칠 수 있을까요?

SELECT * FROM `notifications` 
    WHERE (`condition-1-a` = ? AND `condition-1-b` = ?) 
    OR (`condition-2-a` = ? AND `condition-2-b` = ?) 
    OR (`condition-2-a` = ? AND `condition-2-b` = ?) 
    OR (`condition-2-a` = ? AND `condition-2-b` = ?) 
    ... [etc depending on number of loop iterations] 

또는 SQL 구문이 평가되는 다른 순서가 있습니까?

답변

2

MySQL operator precedence

AND이있다 (나는 내 ​​상황에 특정 아니라 너무 사용할 수 있습니다 뭔가 모든 사람에게 내려 끓여 내 최선을 다했다, 몇 가지 변수 이름과 코드의 다른 측면을 편집 됨) 우선 순위는 OR보다 높습니다. 첫 번째 예는 두 번째 예와 같습니다.

+0

쿨, 고맙습니다. :) – Sidney