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語句?
(我節錄一些變量名稱和代碼的其他方面,我盡我所能去熬下來到每個人都可以使用,因此,它不是具體到我的情況)
很酷,謝謝。 :) – Sidney