如何连接具有 2 个表的主表,以获取 2 个表中的主表主 ID 计数,并在代码点火器中获取主表信息



我有一个主表,它的名字是"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 连接查询是什么,我正在使用 php codeigniter 3.0 框架,所以如果有人知道代码点火器 查询此结果?

此查询将为您提供所需的结果。它将user表联接到business_list表和classified_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 JOINCOUNT每个表中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 演示

尝试这样的事情。

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

最新更新