从单个查询中的同一表中选择两种类型信息MYSQL
我有一个'用户'表,如下图所示。当新用户登录时,他必须使用以前用户的'sponsor_id'。以前用户的'user_name'被用作新用户的'sponsor_id'。现在,我想在新用户登录时显示一些“sponsor_id”详细信息,例如sponsor_id的first_name,last_name,phone等。所有数据都保存在'users'表中。什么应该是查询,请任何人帮助我。我正在使用Laravel5.4。 我想喜欢 -从单个查询中的同一表中选择两种类型信息MYSQL
$sponsor_info = DB::table('users')
->select('first_name','last_name','phone')
->where('user_name', '=', '$sponsor_id')
->first();
我不知道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
我不明白m或s。用户信息和赞助商信息位于同一个表中。 –
它们是别名,'m'是'users'的第一个实例,'s'是第二个。 ,'m'代表用户信息,'''代表'赞助商'信息。 @ Md.RashedulHasan – sagi
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。
此功能添加到您的用户模型:
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
}
我想显示'sponsor_id的first_name,last_name。但它显示我的用户的名字,姓氏。它显示所有数据。 –
自连接用户表,并获取赞助细节 – Rams
你应该尝试写一个JOIN类型的查询,其中加入与同桌。你可以在你选择两个用户的地方进行查询,其中一个是赞助商,另一个是另一个。 –
呃这个名字是这个ID吗?如果发起人更改他们的名字怎么办? – Strawberry