【问题标题】:Select two types information from same table in single query MYSQL在单个查询MYSQL中从同一个表中选择两种类型的信息
【发布时间】:2017-08-27 16:43:34
【问题描述】:

我有一个像下面这样的“用户”表。当新用户登录时,他必须使用前一个用户的“sponsor_id”。以前用户的 'user_name' 被用作新用户的 'sponsor_id'。现在,我想在新用户登录时显示一些 'sponsor_id' 详细信息,例如,sponsor_id 的 first_name、last_name、电话等。所有数据都保存在 'users' 表中。应该是什么查询,请任何人帮助我。我正在使用 Laravel5.4。 我正在尝试类似的东西-

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

【问题讨论】:

  • 自行加入用户表并获取赞助商详细信息
  • 您应该尝试编写一个 JOIN 类型的查询,其中连接与同一个表。您可以在选择两个用户的情况下进行查询,其中一个是赞助商,一个是另一个。
  • 呃名字就是id?如果赞助商改名怎么办?
  • 我只想显示赞助商详细信息,但我和我的赞助商在同一张桌子上。
  • 尝试上传较小的图片,这样人们只会看到与问题相关的列。更容易理解你。

标签: php mysql sql laravel


【解决方案1】:

我不知道 laravel,但我给出了解决方案,请将其转换为 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 。用户信息和赞助商信息在同一张表中。
  • 它们是别名,musers 的第一个实例,s 是第二个实例。 ,m 代表用户信息,s 代表sponsor 信息。 @Md.RashedulHasan
【解决方案2】:
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 中。

【讨论】:

    【解决方案3】:

    将此函数添加到您的用户模型中:

    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's first_name, last_name。但它显示了我用户的名字,姓氏。它正在显示所有数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 2014-01-28
    • 2022-01-18
    相关资源
    最近更新 更多