我有三个表,即users
,galleries
,orders
。结构简单。 galleries
和orders
都有一个名为client_id
的列,作为users
的外键
我需要一个结果集,其中仅包含users
中而不是galleries
中存在的orders
列表。
我尝试了以下操作,但是它为我提供了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'
最佳答案
这个怎么样?不确定是否有效:
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
,其内容为“订单表中不存在client_id的位置”。