【问题标题】:How to join a master table with 2 tables for getting count of master table primary id in 2 tables and with master table information in codeigniter如何将主表与 2 个表连接起来,以获取 2 个表中主表主 ID 的计数以及 codeigniter 中的主表信息
【发布时间】:2018-10-08 11:07:25
【问题描述】:

我有一个主表,它的名字是“user”表,它包含用户的所有信息,有两个表“business_list”和“classified_list”。

我想显示所有用户信息,包括来自business_list 表的业务总数和来自classified_list 的分类总数 表

用户

user_id    user_name     user_email         user_phone
-----------------------------------------------------     
001         Jose         jose@yahoo.in      457855654
002         Tom          tom@yahoo.in       5464644654
003         Nick         nick@yahoo.in      4545645644
004         Rose         rose@yahoo.in      554545441

business_list

bid        user_id      business_name
-----------------------------------------------
001        001          Construction business
002        003          Event business
003        001          Crane business
004        003          Furtinure business
005        004          Realestate business

classified_list 表:

cid      user_id       classified_name
-------------------------------------------    
001      001           Roller classified
002      004           Home classified
003      003           Chair classified
004      004           Office Classified
005      002           Light decoration classified

我想将信息显示为

User Name   User Email         User Phone     No Of Business     No Of Classified
---------------------------------------------------------------------------------
Jose        jose@yahoo.in      457855654           2                   1
Tom         tom@yahoo.in       5464644654          0                   1
Nick        nick@yahoo.in      4545645644          2                   1
Rose        rose@yahoo.in      554545441           1                   2

那么获取此结果的 mysql join 查询是什么,我使用的是 php codeigniter 3.0 框架,所以很好,如果有人知道 codeigniter 查询这个结果?

【问题讨论】:

    标签: mysql codeigniter join jointable codeigniter-query-builder


    【解决方案1】:

    此查询将为您提供所需的结果。它将user 表连接到business_listclassified_list 表中的UNION,并使用条件聚合来汇总与每个用户关联的企业和分类的数量:

    SELECT u.user_name AS `User Name`,
           u.user_email AS `User Email`,
           u.user_phone AS `User Phone`,
           SUM(CASE WHEN bc.type = 'business' THEN 1 ELSE 0 END) AS `No Of Business`,
           SUM(CASE WHEN bc.type = 'classified' THEN 1 ELSE 0 END) AS `No Of Classified`
    FROM user u
    JOIN (SELECT 'business' AS type, user_id 
          FROM business_list
          UNION ALL
          SELECT 'classified' AS type, user_id
          FROM classified_list) bc
    ON bc.user_id = u.user_id
    GROUP BY u.user_id;
    

    或者,您可以对每个表使用LEFT JOINCOUNTing DISTINCT 来自每个表的值:

    SELECT u.user_name AS `User Name`,
           u.user_email AS `User Email`,
           u.user_phone AS `User Phone`,
           COUNT(DISTINCT b.bid) AS `No Of Business`,
           COUNT(DISTINCT c.cid) AS `No Of Classified`
    FROM user u
    LEFT JOIN business_list b ON b.user_id = u.user_id
    LEFT JOIN classified_list c ON c.user_id = u.user_id
    GROUP BY u.user_id
    

    两个查询的输出是一样的:

    User Name   User Email      User Phone  No Of Business  No Of Classified
    Jose        jose@yahoo.in   457855654   2               1
    Tom         tom@yahoo.in    5464644654  0               1
    Nick        nick@yahoo.in   4545645644  2               1
    Rose        rose@yahoo.in   554545441   1               2
    

    SQLFiddle Demo

    【讨论】:

    • 不用担心。很高兴我能帮上忙。
    【解决方案2】:

    试试这样的。

    select u.user_name, u.user_email, u.user_phone, count(distinct b.bid),
           count(distinct c.cid) from user_table u 
       left outer join business_list b 
           on  u.user_id=b.user_id 
       left outer join classified_list c 
           on c.user_id=u.user_id 
    group by 
        u.user_name,u.user_email,u.user_phone
    

    【讨论】:

    • 这是 100% 工作。但我使用的是 codeigniter 3 框架,所以我不能使用 coalesce()
    • 啊.. 顺便说一句,即使没有合并也会产生相同的结果,因为 count 永远不会返回 NULL。更新了我的答案!
    • count(distinct b.user_id) 是必需的,否则答案为假
    猜你喜欢
    • 2015-02-28
    • 2020-09-24
    • 1970-01-01
    • 2011-12-12
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多