Итак, я работаю с laravel 3, которые используют красноречивый ORM в базе данных mysql. У меня есть функция, которая делает повторные круглые поездки на 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