【问题标题】:Laravel - Mysql Where Not In joinLaravel - Mysql Where Not In join
【发布时间】:2017-03-08 10:36:10
【问题描述】:

我有三个表,即usersgalleriesorders。结构简单。 galleriesorders 都有一个名为 client_id 的列作为 users 的外键 我需要一个结果集,其中仅包含galleries 中存在但orders 中不存在的那些users 的列表。 我试过关注,但它给了我orders中存在的所有用户

$users  =   DB::table('galleries')
        ->join('users', 'users.id', '=', 'galleries.client_id')
        ->join('orders', 'orders.client_id', '=', 'users.id')
        ->select('galleries.client_id', 'galleries.path', 'users.first_name', 'users.last_name', 'orders.order_number')
        ->where('galleries.session_id', null)
        ->where('galleries.is_video', '1')
        ->where('galleries.is_thumb', '0')
        ->get();
    dd($users);

上面代码产生的查询是

    select
  `galleries`.`client_id`,
  `galleries`.`path`,
  `users`.`first_name`,
  `users`.`last_name`,
  users.id,
  `orders`.`order_number`
from
  `galleries`
  inner join
  `users`
    on
      `users`.`id` = `galleries`.`client_id`
    inner join
    `orders`
      on
        `orders`.`client_id` = `users`.`id`
where
  `galleries`.`session_id` is null
  and
  `galleries`.`is_video` = '1'
  and
  `galleries`.`is_thumb` = '0'

【问题讨论】:

    标签: php mysql laravel laravel-5.2 inner-join


    【解决方案1】:

    这个怎么样?不确定它是否有效:

    DB::table('galleries')
        ->join('users', 'users.id', '=', 'galleries.client_id')
        ->select('galleries.client_id', 'galleries.path',
                 'users.first_name', 'users.last_name')
        ->where('galleries.session_id', null)
        ->where('galleries.is_video', '1')
        ->where('galleries.is_thumb', '0')
        ->whereNotIn('client_id', function($query) {
            $query->select('client_id')
                  ->from('orders');
        })
        ->get();
    

    我删除了orders.order_number,因为根据您的要求,您提到选择用户没有订单的画廊。如果客户没有订单,如何加入订单?

    我只是提供了一个额外的whereNotIn,它读作“orders 表中不存在client_id”。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 2016-03-16
    • 2016-05-27
    • 1970-01-01
    相关资源
    最近更新 更多