Sql 如何在laravel中进行自连接以产生不同的值
我想要实现的是用户id为8的book\u id与用户id为3的book\u id匹配的行。但仅选择用户的行。而且还与book_id不同。所以我希望结果是: 第1排, 第2排 到目前为止,我有这个,但不幸的是,我一直得到第6行以及第2行和第1行。基本上,我希望结果是不同的图书id,但我不知道如何做到这一点Sql 如何在laravel中进行自连接以产生不同的值,sql,laravel,eloquent,Sql,Laravel,Eloquent,我想要实现的是用户id为8的book\u id与用户id为3的book\u id匹配的行。但仅选择用户的行。而且还与book_id不同。所以我希望结果是: 第1排, 第2排 到目前为止,我有这个,但不幸的是,我一直得到第6行以及第2行和第1行。基本上,我希望结果是不同的图书id,但我不知道如何做到这一点 ID|user_id |book_id |author 1 |8 |7 |bill 2 |8 |6 |sally 3 |3
ID|user_id |book_id |author
1 |8 |7 |bill
2 |8 |6 |sally
3 |3 |7 |rob
4 |3 |4 |sarah
5 |3 |6 |jane
6 |8 |7 |frank
你有两个选择。您可以使用distinct或groupBy 备选案文1:
$check = DB::table('table as u1')
->join('table as u2','u1.book_id', '=', 'u2.book_id')
->where('u2.user_id', 8)->where('u1.user_id', 3)
->get();
备选案文2:
$check = DB::table('table as u1')
->join('table as u2','u1.book_id', '=', 'u2.book_id')
->where('u2.user_id', 8)->where('u1.user_id', 3)
->distinct()
->get();
在MySQL 5.7等价的MySQL查询中,默认情况下启用与其他数据库兼容并使用enabled的适当选项,以获得所需的结果 选择t* 从…起 选择MINt1.id 从表1 t1连接到表1 t2 在t1.book\u id=t2.book\u id上 其中t1.user_id=8 和t2.user_id=3 按t1.user\u id、t1.book\u id分组 q加入表1 t 关于q.id=t.id 输出:
$check = DB::table('table as u1')
->join('table as u2','u1.book_id', '=', 'u2.book_id')
->where('u2.user_id', 8)->where('u1.user_id', 3)
->groupBy('u1.book_id')
->get();
我认为它可能是groupBy变体2,但出于某种原因,我只得到了第1行。变量1我得到第1、2和6行。@Billy将组从user\u id更改为u1.book\u id | ID | user_id | book_id | author | |----|---------|---------|--------| | 1 | 8 | 7 | bill | | 2 | 8 | 6 | sally |