代码之家  ›  专栏  ›  技术社区  ›  Ashutosh Sharma Satish

mysql join选择多列最佳实践

  •  0
  • Ashutosh Sharma Satish  · 技术社区  · 6 年前

    我在用 拉维尔查询生成器 我的连接语句运行得很好。

    User 表列:

    name|email|phone|gender
    

    School_Abouts 表列:

    courses|boards|contact|location|teachers
    

    目前我做的 选择 查询如下:

    $school=User::join('school_abouts', 'users.id', '=', 'school_abouts.school_id')
                    ->where('users.id',$id)
                    ->select('users.name',
                            'users.email',
                            'users.phone',
                            'school_abouts.courses',
                            'school_abouts.boards',
                            'school_abouts.contact',
                            'school_abouts.location',
                            'school_abouts.teachers')
                    ->first();
    

    从中选择列 school_about 表我必须多次写入表名。但是有没有办法传递一个列数组呢?我试过但失败了:

    ->select('users.name',
       'users.email',
       'users.phone',
       'school_abouts'.[courses,boards,location,contact,teachers],
    )
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   revo shanwije    6 年前

    您可以安全地从列中删除表名,因为在两个表中都没有列名,但是,如我所见,您正试图从两个表中获得几乎所有的列,这些列可以简化使用。 * :

    $school = User::join('school_abouts', 'users.id', '=', 'school_abouts.school_id')
                    ->where('users.id', $id)
                    ->select('users.*', 'school_abouts.*')
                    ->first();
    

    但是,如果要获取某些列,并且它们的名称可能会产生歧义,则必须在列名前面加上表名。要使其更短,可以使用别名:

    $school = User::join('school_abouts AS sa', 'users.id', '=', 'sa.school_id')
                    ->where('users.id', $id)
                    ->select('users.name',
                            'sa.courses',
                            'sa.boards',
                            'sa.contact',
                            'sa.location')
                    ->first();