#laravel #partition
#laravel #раздел
Вопрос:
Привет, в настоящее время я пишу запрос, в котором я хотел бы принудительно выполнить раздел, используемый запросом. Я знаю, что этот код работает в MySQL, но я не знаю, как бы я написал это с помощью laravel.
Это код MySQL, который я бы использовал для принудительного разделения
PARTITION (p46)
Я пытался написать следующее в Laravel, но, похоже, это не работает
->raw('PARTITION (p46)')
Я не уверен, что raw
есть ли вообще метод, который вы можете использовать в laravel, поэтому он, вероятно, не работает.
Я использую это принудительное выполнение раздела вместо использования приведенного ниже кода, это значительно ускоряет мои запросы.
->where('venue_id', 46)
Моя таблица использует раздел HASH(venue_id)
, и я попытался использовать код MySQL, и это работает отлично.
Заранее благодарю вас, если у вас есть решение для этого, я нигде не смог найти, которое объясняет, как это сделать.
Вот мой полный запрос laravel, чтобы дать вам некоторый контекст:
$bodyVisitors->selectRaw('SUM(visitors_new) AS new, SUM(visitors_total) AS total')
->raw('PARTITION (p' . $venue_filter . ')')
->where('day_epoch', '>=', $body_start)
->where('day_epoch', '<', $body_end)
->get();
->raw()
Игнорируется, есть ли способ заставить это работать? Я в порядке, если ответ отрицательный, я просто перестану использовать laravel для написания этих запросов.
Комментарии:
1. Какая версия MySQL? Эта функция не существовала до версии 5.6.2.
Ответ №1:
Я также целый день страдаю от проблемы с разделением…
Способ, которым я решаю, заключается в
выберите максимальную временную метку и максимальный идентификатор для T1, затем соедините ее левой кнопкой мыши с T2 на T1.временная метка и идентификатор
Надеюсь, что мое предложение окажет некоторую помощь…
Я все еще пишу сценарий eloquent, почти готовый:'(
Ответ №2:
Попробуйте подобное в вашей модели Eloquent:
$table = $this->getConnection()->getTablePrefix() . $this->getTable();
$table .= ' PARTITION ({your partition})';
$this->newQuery()->from($table)->where()->get();
это будет выполнять запрос, подобный этому:
select * from table PARTITION (xxxxxx) where
Ответ №3:
Попробуйте добавить эту область
{
$query->from($partition);
}
и $partition
— это имя вашего раздела. Попробуйте $partition = 'p46'
в вашем случае