如何多次加入 table 并每次检索一个列值
How to join a table multiple times and retrieving one column value each time
我有一个 Laravel 5.8 项目,我需要加入 3 table 来展示一些结果。
基本上,我已将所有自定义 ID 存储在名为 baseinfos
的 table 中。
例如这里有两个自定义 ID,我需要检索它们 bas_value
:
所以我尝试了这个:
$records = DB::table('members')
->where('mys_olp_id',4)
->join('students', 'members.mbr_usr_id', '=', 'students.std_mbr_id')
->join('baseinfos', 'students.std_degree_id', '=', 'baseinfos.bas_id')
->join('baseinfos', 'members.mbr_gender_id', '=', 'baseinfos.bas_id')
->select('baseinfos.bas_value', 'baseinfos.bas_value')
->get()->toArray();
但这是错误的,并向我显示了错误:
SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique
所以我需要这样说:
// as student_degree
->join('baseinfos', 'students.std_degree_id', '=', 'baseinfos.bas_id')
// as member_gender
->join('baseinfos', 'members.mbr_gender_id', '=', 'baseinfos.bas_id')
然后:
->select('student_degree', 'member_gender')
我该怎么做?
尝试像这样使用 alias:
$records = DB::table('members ass mm')
->where('mm.mys_olp_id',4)
->join('students as ss', 'mm.mbr_usr_id', '=', 'ss.std_mbr_id')
->join('baseinfos as bif', 'ss.std_degree_id', '=', 'bif.bas_id')
->join('baseinfos as bifs', 'mm.mbr_gender_id', '=', 'bifs.bas_id')
->select('mm.*')
->get()->toArray();
您也可以使用 leftJoin 如果它适合您:
$records = DB::table('members ass mm')
->where('mm.mys_olp_id',4)
->leftJoin('students as ss', 'mm.mbr_usr_id', '=', 'ss.std_mbr_id')
->leftJoin('baseinfos as bif', 'ss.std_degree_id', '=', 'bif.bas_id')
->leftJoin('baseinfos as bifs', 'mm.mbr_gender_id', '=', 'bifs.bas_id')
->select('mm.*')
->get()->toArray();
我有一个 Laravel 5.8 项目,我需要加入 3 table 来展示一些结果。
基本上,我已将所有自定义 ID 存储在名为 baseinfos
的 table 中。
例如这里有两个自定义 ID,我需要检索它们 bas_value
:
所以我尝试了这个:
$records = DB::table('members')
->where('mys_olp_id',4)
->join('students', 'members.mbr_usr_id', '=', 'students.std_mbr_id')
->join('baseinfos', 'students.std_degree_id', '=', 'baseinfos.bas_id')
->join('baseinfos', 'members.mbr_gender_id', '=', 'baseinfos.bas_id')
->select('baseinfos.bas_value', 'baseinfos.bas_value')
->get()->toArray();
但这是错误的,并向我显示了错误:
SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique
所以我需要这样说:
// as student_degree
->join('baseinfos', 'students.std_degree_id', '=', 'baseinfos.bas_id')
// as member_gender
->join('baseinfos', 'members.mbr_gender_id', '=', 'baseinfos.bas_id')
然后:
->select('student_degree', 'member_gender')
我该怎么做?
尝试像这样使用 alias:
$records = DB::table('members ass mm')
->where('mm.mys_olp_id',4)
->join('students as ss', 'mm.mbr_usr_id', '=', 'ss.std_mbr_id')
->join('baseinfos as bif', 'ss.std_degree_id', '=', 'bif.bas_id')
->join('baseinfos as bifs', 'mm.mbr_gender_id', '=', 'bifs.bas_id')
->select('mm.*')
->get()->toArray();
您也可以使用 leftJoin 如果它适合您:
$records = DB::table('members ass mm')
->where('mm.mys_olp_id',4)
->leftJoin('students as ss', 'mm.mbr_usr_id', '=', 'ss.std_mbr_id')
->leftJoin('baseinfos as bif', 'ss.std_degree_id', '=', 'bif.bas_id')
->leftJoin('baseinfos as bifs', 'mm.mbr_gender_id', '=', 'bifs.bas_id')
->select('mm.*')
->get()->toArray();