【问题标题】:How to join a table multiple times and retrieving one column value each time如何多次加入表并每次检索一个列值
【发布时间】:2022-01-12 06:44:15
【问题描述】:

我有一个 Laravel 5.8 项目,我需要加入 3 个表来显示一些结果。

基本上,我已将所有自定义 ID 存储在一个名为 baseinfos 的表中。

例如,这里有两个自定义 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]:语法错误或访问冲突:1066 不唯一

所以我需要这样说:

// 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')

我该怎么做?

【问题讨论】:

标签: mysql laravel join laravel-5.8


【解决方案1】:

尝试像这样使用 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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 2016-08-15
    相关资源
    最近更新 更多