我有2个表,其中第一个表具有类别的所有值,但我不想向每个客户显示所有类别,因此有一个列is_hidden结构是
cat_id cat_name is_hidden
1 cat no
2 cat1 no
3 cat2 no
4 cat3 no
5 cat4 yes
6 cat5 yes
现在在我的SQL查询中,我得到了is_hidden列为no的所有值 在我的另一张表中,我批准一些客户来显示该类别 表结构是
id cat_id client_id
1 5 1
现在我想显示is_hidden为no的表中的所有广告系列,现在我已经批准了表2中的客户端,因此它还应该显示来自5的类别ID
现在我如何加入SQL以获得所需的结果。
这是我试过的代码。
Approvals::where('client_id',$client_id)
->rightJoin('tbl_cat', function ($join) {
$join->on('tbl_cat.cat_id', '=', 'tbl_approval.approval_id');
$join->where('tbl_cat.is_hidden','=','no');
});
但我没有在输出中获得第5类。
答案 0 :(得分:1)
这不能通过加入来实现。你应该像以下一样使用union
SELECT
*
FROM
table1
WHERE
is_hidden = 'no'
UNION ALL
SELECT
t.*
FROM
table2 t2 INNER JOIN table1 t ON t.id = t2.cat_id
WHERE
t2.client_id = 1
答案 1 :(得分:0)
您的加入应该在cat_id
,以便您获得cat_id
5的记录。
希望它会对你有所帮助。
Approvals::where('client_id',$client_id)
->rightJoin('tbl_cat', function ($join) {
$join->on('tbl_cat.cat_id', '=', 'tbl_approval.cat_id');
$join->where('tbl_cat.is_hidden','=','no');
});