嗨,我当前正在编写一个查询,以强制查询使用的分区。我知道这段代码可以在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编写这些查询。
答案 0 :(得分:0)
尝试这样:
$query = Model::select(DB::raw('query')); //condition check
$query = $query->where('venue_id', 46);
$query->get(); //or first(); as you prefer
或尝试以下操作:
DB::table('table')
->select(DB::raw('query'))
->where('venue_id', 46)
->get();
答案 1 :(得分:0)
我整天也遇到分区问题...
我解决的方法是
选择T1的最大时间戳和最大ID,然后将其与T1上的T2相连。timestamp和ID
希望我的建议会有所帮助...
我仍然在写雄辩的剧本,快完成了:'(
答案 2 :(得分:0)
在口才模型中尝试这样:
$table = $this->getConnection()->getTablePrefix() . $this->getTable();
$table .= ' PARTITION ({your partition})';
$this->newQuery()->from($table)->where()->get();
将进行如下查询:
select * from table PARTITION (xxxxxx) where