代码之家  ›  专栏  ›  技术社区  ›  Rashed Hasan Vijayaragavan

选择不在另一个表laravel 5.5中的所有列

  •  9
  • Rashed Hasan Vijayaragavan  · 技术社区  · 8 年前

    我有两张桌子——第一张叫做“用户”,第二张叫做“buy_courses”。

    users table

    enter image description here

    我正在尝试选择那些用户名不在buy\u课程中的所有用户。我试过这样的东西-

    $users = DB::table('users')
                    ->rightjoin('buy_courses', 'users.user_name', '=', 'buy_courses.user_name')
                    ->get();
    

    当我使用“buy_courses”时,它返回用户名在“buy_courses”中的所有用户<>',然后我得到了所有的用户。正确的查询应该是什么?

    4 回复  |  直到 6 年前
        1
  •  15
  •   Markownikow    8 年前
    DB::table("users")->select('*')->whereNotIn('user_name',function($query) {
    
       $query->select('user_name')->from('buy_courses');
    
    })->get();
    

    只是 实际上是拉腊维尔的内部连接,所以实际上你也可以尝试:

    DB::table('users')
                ->join('buy_courses', 'users.user_name', '=', 'buy_courses.user_name')
                ->get();
    
        2
  •  5
  •   anayarojo    5 年前

    试着使用雄辩的:

    $courseUserNames = BuyCourses::pluck('user_name')->all();
    $users = User::whereNotIn('user_name', $courseUserNames)->select(...)->get();
    

    或者,如果您更喜欢使用DB查询:

    $courseUserNames = DB::table('buy_courses')->pluck('user_name')->all();
    $users = DB::table('users')->whereNotIn('user_name', $courseUserNames)->select(...)->get();
    
        3
  •  0
  •   Mike Lyons    4 年前

    = 具有 !=

    $users = DB::table('users')
      ->join(
        'buy_courses', 
        function ($join)
        {$join->on('users.user_name', '!=', 'buy_courses.user_name');}
      )
      ->get();
    
        4
  •  -3
  •   Script47    6 年前

    例子:

    mysqli_query($con, "SELECT * FROM users WHERE user_name NOT IN (SELECT user_name FROM buy_courses)");