Как объединить основную таблицу с 2 таблицами для получения количества первичных идентификаторов основной таблицы в 2 таблицах и с информацией об основной таблице в codeigniter - PullRequest
0 голосов
/ 08 октября 2018

У меня есть главная таблица, ее имя - таблица "user", она содержит всю информацию о пользователе, и есть две таблицы "business_list" и "classic_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

classic_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 framework, так что хорошо, если кто-нибудь знает запрос codeigniter для этого результата?

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Этот запрос даст вам результаты, которые вы хотите.Он объединяет таблицу user с UNION таблиц business_list и classified_list и использует условное агрегирование для суммирования количества предприятий и объявлений, связанных с каждым пользователем:

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 ing 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

0 голосов
/ 08 октября 2018

Попробуйте что-то вроде этого.

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
...