Php 如何连接具有多个属性匹配的表?
我试图将原始sql转换为laravel查询生成器,但在如何使用多个属性匹配连接多个表方面遇到了困难 在本例中,我希望使用三个属性匹配(book、p_seq和staff_code)而不是一个(book)来连接表jr_h和jr_d。 原始sql: Laravel查询生成器: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',
$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语句,您真的没有太多选择如何使其更快,因为具有多个条件的多个连接正在使其变慢。建议加快速度,将索引添加到要加入的表中。