Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何连接具有多个属性匹配的表?_Php_Mysql_Laravel_Laravel Query Builder - Fatal编程技术网

Php 如何连接具有多个属性匹配的表?

Php 如何连接具有多个属性匹配的表?,php,mysql,laravel,laravel-query-builder,Php,Mysql,Laravel,Laravel Query Builder,我试图将原始sql转换为laravel查询生成器,但在如何使用多个属性匹配连接多个表方面遇到了困难 在本例中,我希望使用三个属性匹配(book、p_seq和staff_code)而不是一个(book)来连接表jr_h和jr_d。 原始sql: Laravel查询生成器: $jr_d = DB::table('jr_d') ->join('jr_h', 'jr_d.book', '=', 'jr_h.book') ->join('astaff',

我试图将原始sql转换为laravel查询生成器,但在如何使用多个属性匹配连接多个表方面遇到了困难

在本例中,我希望使用三个属性匹配(book、p_seq和staff_code)而不是一个(book)来连接表jr_h和jr_d。 原始sql:

Laravel查询生成器:

   $jr_d = DB::table('jr_d')
        ->join('jr_h', 'jr_d.book', '=', 'jr_h.book')
        ->join('astaff', 'jr_d.staff_code', '=', 'astaff.staff_code')
        ->select('jr_h.*','jr_d.*','astaff.*','astaff.name_t as staff_name')
        ->where('jr_d.ref_group','=','E')
        ->get();
还想知道是否有办法加快查询速度,因为表中有大量数据。

试试以下方法:

/。。。
->join('jr_h p',函数($join){
$join->on('t.book','=','p.book');
$join->on('t.p_-seq','=','p.p_-seq');
//…更多条件
});
试试这个:

/。。。
->join('jr_h p',函数($join){
$join->on('t.book','=','p.book');
$join->on('t.p_-seq','=','p.p_-seq');
//…更多条件
});

Laravel连接具有多种条件:

$results = DB::table('jr_d')
            ->select('jr_h.*','jr_d.*','astaff.*','astaff.name_t as staff_name')
            ->join('jr_h', 'jr_d.book', '=', 'jr_h.book')
            ->join('jr_h as p', function($query){
                $query->on('t.book','=', p.book');
                $query->on('t.p_seq','=', 'p.p_seq');
                $query->on('t.staff_code', '=', 'p.staff_code');
            })
            ->where('jr_d.ref_group','=','E')
            ->get();
    `

Laravel连接具有多个条件:

$results = DB::table('jr_d')
            ->select('jr_h.*','jr_d.*','astaff.*','astaff.name_t as staff_name')
            ->join('jr_h', 'jr_d.book', '=', 'jr_h.book')
            ->join('jr_h as p', function($query){
                $query->on('t.book','=', p.book');
                $query->on('t.p_seq','=', 'p.p_seq');
                $query->on('t.staff_code', '=', 'p.staff_code');
            })
            ->where('jr_d.ref_group','=','E')
            ->get();
    `
试试这个

$jr_d = DB::table('jr_d')
        ->join('jr_h', 'jr_d.book', '=', 'jr_h.book')
        ->join('astaff', 'jr_d.staff_code', '=', 'astaff.staff_code')
        ->select('*','astaff.name_t as staff_name')
        ->where('jr_d.ref_group','=','E')
        ->get();
试试这个

$jr_d = DB::table('jr_d')
        ->join('jr_h', 'jr_d.book', '=', 'jr_h.book')
        ->join('astaff', 'jr_d.staff_code', '=', 'astaff.staff_code')
        ->select('*','astaff.name_t as staff_name')
        ->where('jr_d.ref_group','=','E')
        ->get();

是的,它工作,如何使它更快?我正在等待3分钟,等待它工作…好吧,性能可能与在Laravel DB builder中编写的查询无关。如果还没有,您可能需要在不同的列上定义索引。我根据日期查询了很多数据,这意味着我应该在大多数表的日期列上定义索引。在日期列上定义索引可以提高其性能。如果可以,如何使其更快?我正在等待3分钟,等待它工作…好吧,性能可能与在Laravel DB builder中编写的查询无关。如果还没有,您可能需要在不同的列上定义索引。我根据日期查询了很多数据,这意味着我应该在大多数表的日期列上定义索引。在日期列上定义索引可以提高其性能。如果可以,如何使其更快?我正在等待3分钟,等待它开始工作…@QiYang然后请接受答案,一般来说,查询几乎是原始sql语句,您真的没有太多选择如何使其更快,因为具有多个条件的多个连接正在使其变慢。一个加快速度的建议是将索引添加到要加入的表中。是的,它可以工作,如何加快?我正在等待3分钟,等待它开始工作…@QiYang然后请接受答案,一般来说,查询几乎是原始sql语句,您真的没有太多选择如何使其更快,因为具有多个条件的多个连接正在使其变慢。建议加快速度,将索引添加到要加入的表中。