2013-12-09 97 views
0

所以我正在使用在mysql數據庫上使用雄辯的ORM的laravel 3。我有一個重複往返SQL服務器的函數,並且我已經用它處理了有限的測試用例,但我不能100%確定SQL查詢中的操作順序,所以我是希望有人能給我一個關於我是否正確的想法。舊的代碼如下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) 

我在尋找的主要事情是如何運行查詢確認。我可以期望像這樣運行嗎?

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語句?

(我節錄一些變量名稱和代碼的其他方面,我盡我所能去熬下來到每個人都可以使用,因此,它不是具體到我的情況)

回答