我有一个主表,它的名字是"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 JOIN
,COUNT
每个表中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