在单个查询MYSQL中从同一个表中选择两种类型的信息

时间:2017-08-27 07:23:04

标签: php mysql sql laravel

 My 'users' table: 我有一个'用户'像波纹管的桌子。当新用户登录时,他必须使用一个赞助商_id'来自以前的用户。以前的用户' user_name'被用作赞助商_id'对于新用户。现在,我想展示一些赞助商_id'新用户登录时的详细信息,例如sponsor_id的first_name,last_name,phone等。所有数据都保存在'用户'表。什么应该是查询,请任何人帮助我。我使用的是Laravel5.4。 我正在尝试像 -

$sponsor_info = DB::table('users')
            ->select('first_name','last_name','phone')
            ->where('user_name', '=', '$sponsor_id')
            ->first();

3 个答案:

答案 0 :(得分:1)

我不知道laravel但是我给解决方案plz将其转换为laravel。

select m.*,
       s.first_name,
       s.last_name,
       s.phone 
from user m 
left join user s 
 on m.sponsorid=s.userid

答案 1 :(得分:0)

SELECT 
   user.id,
   user.user_name,
   user.sponsor_id,
   sponsoredUser.user_name
   FROM user
   INNER JOIN user AS sponsoredUser ON user.sponsor_id = sponsoredUser.id
WHERE user.id = $id

这里我使用用户表2次。首先是用于该用户,第二个用于获取该赞助用户的信息。这就是为什么我给第二个用户表名称一个名为sponsoredUser的别名。 希望您将此查询转移到laravel。

答案 2 :(得分:0)

将此功能添加到您的用户模型:

public function sponsor()
{
   $this->belongsTo(App\User::class,'sponsor_id','user_name');
}

现在您可以进行此查询:

$users = App\User::with('sponsor')->get();

所有用户都会加载“赞助商”关系。

Foreach ($users as $user){
   $user->sponsor->first_name;
   // Etc
}