我有三张表,即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'
上层代码生成的查询是
fn pack_item<C: Container>(item: C::Item) -> ItemPacket {
ItemPacket {
container_description: C::describe_container(),
_payload: item.get_payload(),
}
}
fn main() {
let s = pack_item::<ImAContainerType>(ImAnItemType);
println!("{}", s.container_description);
let s = pack_item::<ImAnotherContainerType>(ImAnItemType);
println!("{}", s.container_description);
}
答案 0 :(得分: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的地方”。