Laravel

时间:2017-09-25 09:04:43

标签: mysql laravel join

我有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类。

2 个答案:

答案 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');                
            });