使用Laravel强制进行分区查询

时间:2019-03-28 11:49:49

标签: laravel partition

嗨,我当前正在编写一个查询,以强制查询使用的分区。我知道这段代码可以在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编写这些查询。

3 个答案:

答案 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