【问题标题】:Mysql Join Two tables and get results with If conditionMysql Join 两个表并使用 If 条件获取结果
【发布时间】:2020-04-20 02:31:21
【问题描述】:

在我的应用程序中,用户可以选择多个银行。用户可以选择他拥有信用卡的多家银行。银行列表在银行表中。用户选择的银行被插入到 mobile_user_bank 表中。在 mobile_user_bank 表中的列是 id、mobile_user_id、bank_id。

两张桌子

  1. 银行 - 保存银行列表

  2. mobile_user_bank - 保存用户选择的银行。

我想得到一个 json 对象,它给出一个带有变量 is_selected 的所有银行列表。

  `{
        "id": 2,
        "bank_name": "HNB",
        "image": "bank_hnb.png",
        "is_selected": 1
    },
    {
        "id": 3,
        "bank_name": "BOC\n",
        "image": "bank_boc.png",
        "is_selected": 0
    },
    {
        "id": 4,
        "bank_name": "People's Bank",
        "image": "people.png",
        "is_selected": 1
    }`

我试过这个查询但结果是错误的,没有给出所有的银行,但只有用户选择的银行在重复。

SELECT ub.id, ub.name, ub.image FROM banks ub left join mobile_user_banks mub on ub.id = mub.bank_id where mub.mobile_user_id =25;

【问题讨论】:

    标签: mysql json left-join


    【解决方案1】:

    使用 if 条件,您的查询几乎完成 -

    SELECT ub.id, ub.name, ub.image, if (mub.bank_id is null, 0 , 1) as is_selected
    FROM banks ub 
    left join mobile_user_banks mub on ub.id = mub.bank_id 
    and mub.mobile_user_id = 25 ;
    

    https://paiza.io/projects/G7GOjsR03mqygV3fkeL6CA?language=mysql

    【讨论】:

    • 没有给出左表结果。只有我得到内部连接结果,这意味着如果我添加为左连接,但结果只有用户添加了银行。在我的表中有 20 个银行,用户只选择了 4 个,对于上面的查询,它只输出 4 个重复的银行。
    • @user2552863 我已经更新了我的答案,可能是您在 where 中使用用户过滤器,而不是您必须在 on 时使用用户过滤器。更新答案见。
    猜你喜欢
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    相关资源
    最近更新 更多